2012-03-26 13 views
5

Qual è il modo migliore per distribuire SQL personalizzato per le viste utilizzate dai modelli Django non gestiti?Come installare SQL personalizzato con Django

Ho un modello myapp.models.MyModel utilizzando una vista myview.sql, specificata nell'attributo meta "db_table" dei modelli. Quindi, dopo the docs, ho inserito il file SQL personalizzato in myapp/sql/myview.sql.

Tuttavia, dopo aver eseguito python manage.py syncdb, la vista non è installata. Eseguire sqlcustom in modo simile non mostra la vista.

Cos'altro devo fare in modo che Django rilevi e distribuisca automaticamente il mio SQL personalizzato?

risposta

1

Secondo the doc, il nome del file frontend/sql/mymodel.sql invece di frontend/sql/myview.sql

+0

Questo rende il mio sql display quando eseguo sqlcustom, ma syncdb continua a non installarlo. – Cerin

+1

@Cerin Hai abbandonato la tabella DB prima di ripetere syncdb? Come puoi vedere nell'output di sqlcustom, i sql personalizzati sono bundle w/create sqls di tabella in un singolo blocco COMMEG BEGIN. Puoi eseguire syncdb con -v 3 per verificare cosa fa per te – okm

+2

L'app in questione è gestita da South, quindi suppongo che Django ignori sql personalizzato nelle app South ... e purtroppo South non supporta la migrazione di SQL personalizzato ... – Cerin

8

python manage.py sqlcustom sarà emesso solo le istruzioni SQL personalizzati che hai definito, ma è necessario eseguire li nel database. Naturalmente, è possibile copiare e incollare, ma se si desidera automatizzare il processo e renderlo meno noioso/soggetto a errori, un modo semplice per farlo (almeno in un ambiente * nix) è utilizzare una pipe:

python manage.py sqlcustom myapp | python manage.py dbshell

+0

Con il senno di poi, questo non sembra funzionare in modo affidabile. 'sqlcustom' non genera nulla per un modello non gestito utilizzando una vista SQL per uno specifico back-end db. per esempio. myapp/sql/mymodel.sql compare, ma myapp/sql/mymodel.postgresql.sql non lo fa. – Cerin

+0

Nota che sqlcustom sta andando via in Django 1.9, con la raccomandazione di usare invece RunSQL. – mlissner

Problemi correlati