Ich versuche eine migrations.RunSQL
Django-Migration zu verwenden, um irgendeinen beliebigen SQL-Code auszuführen. Ich möchte diese Migration nur für bestimmte DB-Backends ausführen (zum Beispiel nur für Postgres).
Ich würde denken, so etwas zu verwenden , aber ich tue es nicht Die DB-Verbindungsinformationen in der Migration
-Klasse werden nicht angezeigt.
Ich hatte genau das gleiche Bedürfnis. Ich musste eine Migration bearbeiten, die den Anfangswert einer Sequenz festlegte, die auf postgres aber nicht sqlite funktioniert. Hier ist, wie ich die RunSQL in einem RunPython verpackt habe, indem ich der Dokumentation folgte, mit der Daniel verlinkt ist.
%Vor% Ich habe heute ein ähnliches Problem gelöst - ich musste eine Migration durchführen, um ein neues Modell zu erstellen, aber nur für eine Postgres-Datenbank - und ich habe diese Frage gefunden. Aber die Antwort von Matthew hat mir nicht geholfen. Tatsächlich bin ich mir nicht sicher, ob es überhaupt funktioniert. Das liegt daran, dass die Zeile mit migrations.RunSQL(...)
nicht wirklich > SQL ausführt; it erstellt ein neues Objekt vom Typ RunSQL
, das ein Command
ist, und verwirft es dann sofort.
So habe ich das Problem gelöst, falls jemand in Zukunft nach einer "django-bedingten Migration" suchen möchte:
%Vor% Diese Informationen werden in der Migrationsklasse nicht bereitgestellt. Sie werden im schema_editor
-Attribut bereitgestellt, das an eine RunPython-Operation übergeben wird. Beispiele dazu finden Sie in der Dokumentation .
Tags und Links django django-migrations django-orm django-database