Django - South - gibt Es eine Möglichkeit die SQL-läuft es?
Hier ist, was ich tun will.
Entwickeln ein Django-Projekt auf einem Entwicklungs-server mit einer Entwicklung Datenbank. Führen Sie den Süden Migrationen als notwendig, wenn ich das Modell ändern.
Speichern Sie die SQL von jeder migration und wenden diese auf den Produktions-server, wenn ich bereit bin zu implementieren.
Ist so etwas möglich mit in den Süden? (Ich würde auch neugierig sein, was andere tun, um Ihre Entwicklung Datenbank-änderungen auf die Produktion bei der Arbeit mit Django)
- Reine Neugier: Warum möchten Sie die änderungen von Hand ein, anstatt die Migration der app mit Süd-auf die Produktion als auch?
- Es geht um ziemlich wichtige Daten, und ehrlich gesagt, ich weiß nicht, ob ich das Vertrauen jedes Paket genug, um an meine Daten. Ich würde eher überprüfen der SQL, es wird zuerst ausgeführt, um sicherzustellen, es wird nicht Schaden nichts. Ich denke, ich könnte das system offline nehmen, und die backup-Daten vor der Migration.
- Das macht Sinn, danke. Meine Erfahrung mit Süd wurde gut genug für mich zu etwas Vertrauen, dass die Dinge nicht gehen... naja, in Richtung Süden. 🙂 Ich glaube nicht, dass South irgendeiner Weise zu untersuchen Sie die resultierenden SQL-obwohl, aber ich könnte falsch sein. Hinzufügen eines bounty zu sehen, wenn jemand Glockenspiel in mit eine definitive Antwort.
- Wenn südlich schief geht (es hat Warzen) - manchmal ist es Zeit, um die mysql-Kommandozeile, und Feuer durch die SQL manuell, führen Sie dann die migration mit "--fake". Ich hasse es, so zu tun. Die alternative wäre fix/patch-Süd, wenn ich herausfinden kann wie. Dies wird dann eine Frage, wie viel Zeit Sie haben...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie zumindest prüfen Sie die generierte sql-by-doing -
manage.py migrate --db-dry-run --verbosity=2
. Das wird nicht alles tun, um die Datenbank und zeigt alle sql. Ich würde trotzdem ein backup machen, aber besser safe als sorry../manage.py: error: no such option: --db-dry-run
ist das nur im Süden?sqlmigrate
Befehl docs.djangoproject.com/en/1.8/ref/django-admin/...Könnten Sie versuchen, die Protokollierung der SQL-Abfragen in der db.- Verbindung.Abfragen, mit einem management-Befehl zum aufrufen der Migration mit einem dry-run-option:
Unter der Annahme, dass south bringt alles mit den üblichen db-Schnittstelle, die funktionieren sollte. Es wird ein paar extra wählt, in der es, wenn er Abfragen an die history-Tabelle.
Würden Sie setzen, dass in einer
management/commands/print_migration_sql.py
innen Ihre app und führen Sie es:Könnte es wahrscheinlich problemlos erweitert werden, um die Ausführung dieses nur für bestimmte apps etc
"no dry run output for alter_column() due to dynamic DDL, sorry"
.Wenn ich brauche, um zu sehen, die SQL -, die Süd-erzeugt für die Fehlersuche oder überprüfung, ich fügen Sie einfach die folgenden logging-Einstellungen zu meinem local_settings.Die PROTOKOLLIERUNG.Holzfäller:
Dies ist ein vollständiges Beispiel für die logging-Einstellung für den Süden:
Dieser Ausgabe wird alles, einschließlich der Abfrage, Süden läuft, um zu entscheiden, was Migrationen ausführen:
Dass und Einstellung Ausführlichkeit auf 2 oder 3 wird in der Regel mehr als genug, um ein klares Bild von dem, was Los ist.
Ich würde entweder das tun, was Lutger vorgeschlagen (und vielleicht schreiben Sie einen log-parser, Streifen aus nur SQL), oder ich würde meine migration gegen eine test-Datenbank mit aktivierter Protokollierung auf der test-DB.
Natürlich, wenn Sie können führen Sie es gegen die Datenbank testen, du bist nur ein paar Schritte von der Validierung der migration. Wenn es geht, führen Sie ihn erneut gegen die Produktion.