2012-03-26 12 views
5

Jaki jest najlepszy sposób wdrożenia niestandardowego kodu SQL dla widoków używanych przez niezarządzane modele Django?Jak zainstalować niestandardowy kod SQL za pomocą Django

Mam model myapp.models.MyModel przy użyciu widoku myview.sql, określonego w atrybutach meta "db_table" modeli. Tak więc, po the docs, umieściłem niestandardowy plik SQL w myapp/sql/myview.sql.

Jednak po uruchomieniu python manage.py syncdb widok nie jest zainstalowany. Uruchamianie sqlcustom podobnie nie pokazuje widoku.

Co jeszcze muszę zrobić, aby Django automatycznie wykrył i wdrożył niestandardowy kod SQL?

Odpowiedz

1

Według the doc, nazwij plik myapp/sql/mymodel.sql zamiast myapp/sql/myview.sql

+0

To sprawia, że ​​mój wyświetlacz sql po uruchomieniu sqlcustom, ale syncdb nadal nie instaluje go. – Cerin

+1

@Cerin Czy upuściłeś tabelę DB przed ponowną synchronizacją syncdb? Jak widać w wynikach sqlcustom, niestandardowe sqls to bundle w/create sqls w jednym bloku BEGIN ... COMMIT. Możesz uruchomić syncdb z opcją -v 3, aby sprawdzić, co on dla ciebie robi. – okm

+2

Ta aplikacja jest zarządzana przez South, więc domyślam się, że Django ignoruje niestandardowe sql w aplikacjach South ... i niestety South nie obsługuje migracji niestandardowego SQL ... – Cerin

8

python manage.py sqlcustom będzie tylko wyjście z niestandardowych SQL, które zostały zdefiniowane, ale trzeba wykonać je w bazie danych. Oczywiście możesz kopiować i wklejać, ale jeśli chcesz zautomatyzować proces i sprawić, by był mniej nużący/podatny na błędy, jednym z łatwych sposobów (przynajmniej w środowisku * nix) jest użycie rury:

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

+0

Z perspektywy czasu wydaje się, że nie działa to niezawodnie. 'sqlcustom' nic nie daje dla niezarządzanego modelu przy użyciu widoku SQL dla określonego zaplecza db. na przykład myapp/sql/mymodel.sql wyświetla się, ale myapp/sql/mymodel.postgresql.sql tego nie robi. – Cerin

+0

Należy zauważyć, że sqlcustom znika w Django 1.9, zalecając użycie RunSQL. – mlissner

Powiązane problemy