Django syncdb führt kein benutzerdefiniertes SQL aus

8

Ich versuche, meine App dazu zu bringen, mit der offiziellen Methode, einige INSERT-Anweisungen in /sql/.sql

zu platzieren, einige benutzerdefinierte SQL auf syncdb auszuführen

Wenn ich jetzt "manage.py sqlall" ausführe, ist das gesamte SQL, das ich ausführen möchte, da.

Nach dem Ausführen von syncdb sind die gewünschten Daten jedoch nirgendwo in der Datenbank zu finden! Fehle ich etwas?

BEARBEITEN: Die App, für die ich die Inserts erstellen möchte, verwendet South-Migrationen, und das ist vielleicht der Grund, warum das ursprüngliche SQL übersprungen wird. Weiß jemand, wie ich es zwingen kann, das SQL nach der Migration vielleicht auszuführen?

    
elsurudo 05.02.2012, 01:25
quelle

2 Antworten

3

Initial data sql wird nicht ausgeführt für Anwendungen in Süd-Management. Soweit ich das verstanden habe, ist dies beabsichtigt, obwohl ich keinen formellen Beweis dafür finden konnte, außer diesem Mailinglistenbeitrag .

Um das gleiche Verhalten zu erreichen, können Sie eine Migration und konvertieren Ihre SQL in Python erstellen. So habe ich es gemacht, um eine Ansicht zu installieren:

Erstellen und bearbeiten Sie die Migration:

%Vor%

Hier ist die Migration selbst:

%Vor%

Bei Datenmigrationen ist der Ablauf ähnlich:

%Vor%

Hier ist die Migration selbst:

%Vor%

Das offizielle South doc für Daten-Fixtures ist defekt:

  1. Es skaliert nicht gut in Bezug auf Schemaänderungen.

    Sie sollten die Fixture-Datei jedes Mal kopieren und anpassen, wenn Sie die Bar -Modellfelder ändern. Also würden Sie mit "my_fixture_v1.json", "my_fixture_v2.json" und so weiter enden.

    Andernfalls, wenn Sie die Versionierung nicht beibehalten und nur die neueste Version behalten, wird es zwischen früheren Versionen des Modells und der Fixtures zu Unstimmigkeiten kommen und Sie werden nicht in der Lage sein, Migrationen hin und her zu navigieren.

  2. Rückwärtsmigration wird nicht unterstützt.

Der vorgeschlagene Ansatz berücksichtigt diese beiden Probleme:

  1. Da Sie orm.Bar verwenden, haben Sie die Menge der Felder, die für Bar genau an diesem Punkt im Verlauf gelten. Sie erhalten keine fehlenden oder zusätzlichen Felder.
  2. Es ist nicht nötig, irgendetwas mit Bar änderungen zu kopieren.
  3. Es ist möglich, rückwärts zu migrieren.

    Beachten Sie, dass filter().delete() combination anstelle von get().delete() verwendet wird. Auf diese Weise löschen Sie nicht die Bar s, die vom Benutzer geändert wurden, und Sie können auch nicht mit Bar.DoesNotExist fehlschlagen, wenn Sie sie nicht finden.

Ihor Kaharlichenko 23.01.2014 11:13
quelle
-1

Ich bin mir nicht ganz sicher, was Sie tun, aber wenn Sie die Datenbank vorbelegen möchten, müssen Sie Fixtures verwenden.

Ссылка

    
percent20 05.02.2012 04:11
quelle

Tags und Links