Django - Vergleichen Sie den Modellcode mit der Datenbank

8

Ich pflege ein Django-Projekt mit einer Datenbank, die mehrere Modelleinschränkungen aufweist, die nicht mehr mit der tatsächlichen Datenbank übereinstimmen. So haben zum Beispiel einige Modellfelder null = False gesetzt, aber die Datenbank erlaubt NULL für die entsprechende Datenbankspalte.

Ich bin neugierig, ob es ein Dienstprogramm in Django oder einem Python-Skript eines Drittanbieters gibt, das die SHOW CREATE TABLE-Ausgabe (in diesem Fall mit MySQL-Syntax) für jede Tabelle vergleicht und sie mit der Python vergleicht manage.py SQL-Ausgabe, um die Diskrepanzen hervorzuheben.

Zugegeben, in einer idealen Situation würde die Datenbank nicht mit dem Django-Modellcode nicht synchron sein, aber da ich dort bin, bin ich neugierig, ob es eine Lösung für dieses Problem gibt, bevor ich schreibe ich selbst oder mache den Vergleich manuell.

    
Jim McGaw 23.08.2010, 19:11
quelle

3 Antworten

4

./manage.py inspectdb erzeugt die Modelldatei, die den in der Datenbank vorhandenen Modellen entspricht.

Sie können es mit Ihren aktuellen Modelldateien vergleichen, indem Sie ein Standard-Unix-Diff oder ein anderes Diffing-Tool verwenden, um das zu finden Unterschied und planen Sie Ihre Migrationsstrategie.

Während ersteres einfacher und besser erscheint, können Sie das diff auch auf SQL-Ebene sehen. ./manage.py sqlall erzeugt die SQL für das aktuelle Datenbankschema und entsprechend show create table table-name zeigt die SQL für die Tabellenerstellung.

Vielleicht möchten Sie Ссылка referenzieren, das den Zustand der db automatisch in den Zustand migriert hat aktuelle Modelle. - Beachten Sie jedoch, dass dieses Projekt alt ist und aufgegeben scheint.

    
Lakshman Prasad 23.08.2010, 20:25
quelle
3

Ich hatte ein schnelles und schmutziges Mittel, um das zu tun, was ich beschrieben habe. Es ist nicht perfekt, aber wenn Sie ./manage.py testserver ausführen, wird die Testdatenbank basierend auf dem Modellcode erstellt. Dann (unter Verwendung der MySQL-spezifischen Syntax) können Sie das Schema für die reguläre Datenbank und die Testdatenbank in Dateien ablegen:

%Vor%

Dann können Sie einfach diff schema.txt und test_schema.txt diff und finden Sie die Unterschiede.

    
Jim McGaw 23.08.2010 21:50
quelle
2

Führen Sie für PostgreSQL ein manage.py syncdb in einer temporären leeren Datenbank aus und speichern Sie die Produktion und die temporären Datenbanken mit pg_dump -sOx und vergleichen Sie die resultierenden Dateien. Unter den visuellen Diff-Tools scheint zumindest GNOME Meld gut mit PostgreSQL-Dumps zurecht zu kommen.

    
akaihola 04.04.2011 13:53
quelle

Tags und Links