Django Migration RunSQL abhängig vom Datenbanktyp

8

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.

    
Alex Rothberg 03.09.2015, 20:06
quelle

4 Antworten

4

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%     
Matthew 30.05.2016 08:37
quelle
4

Hier ist, wie ich das Problem gelöst habe, da ich RunSQL nicht in RunPython arbeiten konnte. Glücklicherweise hat das Objekt schema_editor eine Methode execute() .

%Vor%     
PaulMest 21.07.2017 08:23
quelle
3

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%     
Shaggy Frog 10.06.2016 04:53
quelle
0

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 .

    
Daniel Roseman 03.09.2015 20:16
quelle