Django Süd - Tisch existiert bereits
Ich versuche, um loszulegen mit dem Süden. Ich hatte eine vorhandene Datenbank und ich fügte Süden (syncdb
schemamigration --initial
).
Dann habe ich aktualisiert models.py
um ein Feld hinzuzufügen, und lief ./manage.py schemamigration myapp --auto
. Es schien auf das Feld und sagte, ich könnte gelten diese mit ./manage.py migrate myapp
. Aber dies gab die Fehlermeldung:
django.db.utils.DatabaseError: table "myapp_tablename" already exists
tablename
ist in der ersten Tabelle aufgeführt, die in models.py
.
Ich bin mit Django 1.2, South 0.7
InformationsquelleAutor der Frage Steve | 2010-06-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
da Sie bereits die Tabellen in der Datenbank erstellt, die Sie gerade brauchen, um ausführen die erste migration als fake
stellen Sie sicher, dass das schema der Modelle ist dasselbe wie das schema der Tabellen in der Datenbank.
InformationsquelleAutor der Antwort Ashok
Habe genau das gleiche problem!
1.Erstens überprüfen Sie die migration Anzahl was ist die Ursache HIERFÜR. Wir nehmen an es ist: 0010.
2.Sie müssen:
wenn es mehr als ein Feld fehlt, dann wiederholen Sie es für jeden Bereich.
3.Nun landen Sie mit einem Bündel von neuen Migrationen so entfernen Sie Ihre Dateien von myapp/Migrationen (0011 und weiter, wenn Sie benötigt, um das hinzufügen mehrerer Felder).
4.Dies ausführen:
Nun versuchen ./manage.py migrieren Sie die Anwendung
Wenn es nicht scheitern, du bist bereit. Nur prüfen, wenn irgendein Feld nicht fehlen.
EDIT:
Dieses problem kann auch auftreten, wenn Sie eine Produktions-Datenbank, für die Sie installieren Süd-und der erste, Initiale migration erstellt in anderen traumhaften Duplikate, was Sie bereits in Ihrem db. Die Lösung ist viel einfacher hier:
Fake die erste migration:
./verwalten, migrieren Sie die Anwendung 0001 --fake
Rolle mit dem rest der Migrationen:
./verwalten, migrieren Sie die Anwendung
InformationsquelleAutor der Antwort pielgrzym
Als ich lief in diesen Fehler, es hatte eine andere Ursache.
In meinem Fall Süden hatte irgendwie verlassen in meiner DB eine temporäre leere Tabelle, die verwendet wird, in _remake_table(). Wahrscheinlich hatte ich abgebrochen, eine migration in einer Weise, die ich nicht haben sollte. In jedem Fall wird jede nachfolgende neue migration, wenn es aufgerufen _remake_table(), warf den Fehler
sqlite3.pypysqlite2.dbapi2.OperationalError: table "_south_new_myapp_mymodel" already exists
weil es hat bereits vorhanden und sollte nicht da sein.Den _south_new etwas sah seltsam auf mich, so dass ich meine DB durchsucht, sah die Tabelle
_south_new_myapp_mymodel
kratzte mich am Kopf, schaute Südlich der Quellebeschlossen, es sei junk, die Tabelle gelöscht, und alles war gut.InformationsquelleAutor der Antwort ben author
Perform these steps in order may help you
:1) python manage.py schemamigration apps.appname --erste
Oben Schritt erstellt migration Ordner als Standard.
2) python manage.py migrieren von Anwendungen.appname --fake
erzeugt eine gefälschte migration.
3) python manage.py schemamigration apps.appname --auto
Dann können Sie Felder hinzufügen, wie Sie wollen, und führen Sie die oben genannten Befehl.
4) python manage.py migrieren von Anwendungen.appname
InformationsquelleAutor der Antwort Vijesh Venugopal
Wenn Sie Probleme haben, mit Ihren Modellen nicht passend zu Ihrer Datenbank, wie @pielgrzym, und Sie möchten, um automatisch die Migration der Datenbank entsprechen den neuesten models.py Datei (und löscht alle Daten, die nicht wiederhergestellt werden Leuchten während
migrate
):Diese nur löschen und neu erstellen der Datenbank-Tabellen, die es in Ihrem neuesten
models.py
- Datei, so können Sie Müll Tabellen in Ihrer Datenbank aus einer früherensyncdb
s odermigrate
s. Um loszuwerden, diejenigen, die vorangehen, die alle diese Migrationen mit:- Und wenn, lässt noch einige RESTE herumliegen in der Datenbank, dann haben Sie, um eine
inspectdb
und erstellen diemodels.py
- Datei aus, die (für die Tische und app, die Sie löschen möchten), bevor Sie diesqlclear
und dann wieder die ursprüngliche models.py vor dem erstellen der--initial
migration und Migration. All dies zu vermeiden Herumspielen mit dem besonderen Geschmack der SQL-Datenbank benötigt.InformationsquelleAutor der Antwort hobs
Wenn Sie eine vorhandene Datenbank und Anwendung, die Sie verwenden können, die Süd-conversion-Befehl
Dies gilt vor Sie müssen änderungen, welche bereits in der Datenbank.
Den convert_to_south Befehl funktioniert nur, komplett auf der ersten Maschine, die Sie ausführen. Sobald Sie begangen haben die ersten Migrationen machte es in Ihrem VCS, musst du laufen
./manage.py migrate myapp 0001 --fake
auf jeder Maschine, die eine Kopie der codebase (stellen Sie sicher, waren Sie up-to-date mit Modellen und Schemas).ref: http://south.readthedocs.org/en/latest/convertinganapp.html
InformationsquelleAutor der Antwort Tommy Strand
Als temporäre Lösung, können Sie Kommentar die Erstellung der Tabelle in der migration-Skript.
Oder
Wenn die vorhandene Tabelle enthält keine Zeilen (leer ist), dann sollten Sie die Tabelle wie unten. (Dieses Update wird nur empfohlen, wenn die Tabelle enthält keine Zeilen). Auch stellen Sie sicher, dass dieser Vorgang vor dem createModel Betrieb.
InformationsquelleAutor der Antwort AceLearn
Noch eine Lösung(vielleicht eine vorübergehende Lösung).
zB.,.
Diese listet alle Migrationen im raw-sql-Abfragen. Sie können wählen Sie die Abfragen, die Sie ausführen möchten vermeiden, das Teil schafft die vorhandene Tabelle
InformationsquelleAutor der Antwort AceLearn