2012-03-26 4 views
5

¿Cuál es la mejor manera de implementar SQL personalizado para las vistas utilizadas por los modelos de Django no administrados?Cómo instalar SQL personalizado con Django

Tengo un modelo myapp.models.MyModel utilizando una vista myview.sql, especificada en el atributo meta de los modelos "db_table". Entonces, siguiendo the docs, coloqué el archivo SQL personalizado en myapp/sql/myview.sql. No se ha instalado la vista después de ejecutar python manage.py syncdb. Ejecutar sqlcustom de manera similar no muestra la vista.

¿Qué más necesito hacer para que Django detecte e implemente automáticamente mi SQL personalizado?

Respuesta

1

Según the doc, el nombre del archivo miaplicacion/sql/mymodel.sql en lugar de miaplicacion/sql/myview.sql

+0

Eso tiene mi pantalla de SQL cuando corro sqlcustom, pero syncdb todavía no lo instala. – Cerin

+1

@Cerin ¿Ha dejado caer la tabla DB antes de volver a hacer la sincronización? Como puede ver en la salida de sqlcustom, los sqls personalizados son paquetes w/create table sqls en el único BEGIN ... COMMIT block. Puede ejecutar syncdb con -v 3 para comprobar lo que hace por usted – okm

+2

La aplicación en cuestión es administrada por South, así que supongo que Django ignora sql personalizado en aplicaciones South ... y desafortunadamente South no admite la migración de SQL personalizado ... – Cerin

8

python manage.py sqlcustom sólo generará las sentencias SQL personalizados que ha definido, pero que necesita para ejecutar ellos en la base de datos. Por supuesto, puede copiar y pegar, pero si desea automatizar el proceso y hacerlo menos tedioso/propenso a errores, una forma sencilla de hacerlo (al menos en un entorno * nix) es usar un conducto:

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

+0

En retrospectiva, esto no parece funcionar de manera confiable. 'sqlcustom' no genera nada para un modelo no administrado que utiliza una vista de SQL para un back-end de db específico. p.ej. myapp/sql/mymodel.sql aparece, pero myapp/sql/mymodel.postgresql.sql no. – Cerin

+0

Tenga en cuenta que sqlcustom se va en Django 1.9, con la recomendación de utilizar RunSQL en su lugar. – mlissner

Cuestiones relacionadas