Soweit ich weiß, gibt es keinen Verwaltungsbefehl zum Löschen aller Tabellen. Wenn es Ihnen nichts ausmacht, Python zu hacken, können Sie dazu Ihren eigenen Befehl schreiben. Möglicherweise finden Sie die sqlclear
Option interessant. Die Dokumentation besagt, dass ./manage.py sqlclear
die DROP TABLE SQL-Anweisungen für die angegebenen App-Namen gedruckt werden.
Update : Schamlos den Kommentar von @Mike DeSimone unter dieser Antwort verwenden, um eine vollständige Antwort zu geben.
./manage.py sqlclear | ./manage.py dbshell
Ab Django 1.9 ist es jetzt ./manage.py sqlflush
./manage.py sqlclear myAppName | ./manage.py dbshell
Es gibt keinen nativen Django-Verwaltungsbefehl zum Löschen aller Tabellen. Beides
sqlclear
undreset
erfordern einen App-Namen.Sie können jedoch Django Extensions installieren, mit denen Sie
manage.py reset_db
genau das tun, was Sie möchten (und auf viele weitere nützliche Verwaltungsbefehle zugreifen können).quelle
manage.py reset_db
das Flag "-c, --close-session", um Datenbankverbindungen zu schließen, bevor die DatenbankWenn Sie das South-Paket verwenden, um Datenbankmigrationen durchzuführen (sehr zu empfehlen), können Sie einfach den
./manage.py migrate appname zero
Befehl verwenden.Andernfalls würde ich den
./manage.py dbshell
Befehl empfehlen , SQL-Befehle bei der Standardeingabe weiterzuleiten.quelle
python manage.py migrate <app> zero
sqlclear
wurde aus 1.9 entfernt.In den Versionshinweisen wird erwähnt, dass dies auf die Einführung von Migrationen zurückzuführen ist: https://docs.djangoproject.com/de/1.9/releases/1.9/
Leider konnte ich weder eine Methode finden, die für alle Apps gleichzeitig funktioniert, noch eine integrierte Methode zum Auflisten aller installierten Apps des Administrators: Wie liste ich alle installierten Apps mit manage.py in Django auf?
Verwandte: Wie kann man Migrationen in Django 1.7 zurücksetzen?
quelle
Es ist besser zu verwenden,
./manage.py sqlflush | ./manage.py dbshell
da für sqlclear eine App zum Spülen erforderlich ist.quelle
einfache (?) Möglichkeit, dies mit Python (auf MySQL) zu tun:
quelle
Wenn Sie die Datenbank vollständig löschen und gleichzeitig neu synchronisieren möchten, benötigen Sie Folgendes. Ich kombiniere auch das Hinzufügen von Testdaten in diesem Befehl:
Es wäre schön , die Lage sein , zu tun ,
cursor.execute(call_command('sqlclear', 'main'))
sonderncall_command
druckt die SQL eher an stdout , als es als String zurückkehrt, und ich kann das nicht funktionierensql_delete
Code ...quelle
USE DATABASE
ich Ihnen empfehle, ein django-recreate-db-Paket mit einem Verwaltungsbefehl zu erstellen, der basierend auf den Einstellungen für den Wechsel zwischen SQLite3 und PostGresql automatisch wechselt.Hier ist ein Shell-Skript, das ich zusammengestellt habe, um dieses Problem zu beheben. Hoffe es spart jemandem etwas Zeit.
quelle
Mit Python zum Erstellen eines Flushproject-Befehls verwenden Sie:
quelle
flushdb
und nachdem ich einen anderen Befehl gestartet habe. Wenn Sie es in einem anderen Skript benötigen, können Sie es verwendencall_command
call_command
. Du sagst, ich sollte escall_command("flushdb")
vorher tuncall_command("syncdb")
?Der Befehl
./manage.py sqlclear
oder./manage.py sqlflush
scheint die Tabelle zu löschen und nicht zu löschen. Wenn Sie jedoch die gesamte Datenbank löschen möchten, versuchen Sie Folgendes :manage.py flush
.Warnung: Dadurch wird Ihre Datenbank vollständig gelöscht und Sie verlieren alle Ihre Daten. Wenn dies nicht wichtig ist, versuchen Sie es.
quelle
Hier ist ein Beispiel für ein Makefile, um einige nette Dinge mit mehreren Einstellungsdateien zu tun:
Dann können Sie Dinge tun wie:
$ make db_reset
quelle
Diese Antwort ist für postgresql DB:
Run: echo 'drop von some_user ' | ./manage.py dbshell
HINWEIS : some_user ist der Name des Benutzers, mit dem Sie auf die Datenbank zugreifen. Siehe Datei settings.py:
quelle
Wenn Sie psql verwenden und django-more 2.0.0 installiert haben, können Sie dies tun
manage.py reset_schema
quelle
Hier ist eine Südmigrationsversion der Antwort von @ peter-g. Ich spiele oft mit rohem SQL, daher ist dies praktisch als 0001_initial.py für alle verwirrten Apps. Es funktioniert nur mit DBs, die unterstützen
SHOW TABLES
(wie MySQL). Ersetzen Sie so etwas wie,SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
wenn Sie PostgreSQL verwenden. Außerdem mache ich oft genau dasselbe für dieforwards
und diebackwards
Migrationen.Mitarbeiter / Cocoder würden mich töten, wenn sie wüssten, dass ich das getan habe.
quelle
Es gibt eine noch einfachere Antwort, wenn Sie ALLE Ihre Tabellen löschen möchten. Gehen Sie einfach zu Ihrem Ordner mit der Datenbank (die möglicherweise als mydatabase.db bezeichnet wird), klicken Sie mit der rechten Maustaste auf die DB-Datei und klicken Sie auf "Löschen". Altmodisch, sicher zu arbeiten.
quelle
Löscht alle Tabellen und erstellt sie neu:
Erläuterung:
manage.py sqlclear
- "druckt die DROP TABLE SQL-Anweisungen für die angegebenen App-Namen aus"sed -n "2,$p"
- erfasst alle Zeilen außer der ersten Zeilesed -n "$ !p"
- erfasst alle Zeilen außer der letzten Zeilesed "s/";/" CASCADE;/"
- ersetzt alle Semikolons (;) durch (CASCADE;)sed -e "1s/^/BEGIN;/" -e "$s/$/COMMIT;/"
- fügt (BEGIN;) als ersten Text ein, fügt (COMMIT;) als letzten Text einmanage.py dbshell
- "Führt den Befehlszeilenclient für das in Ihrer ENGINE-Einstellung angegebene Datenbankmodul mit den in Ihren USER-, PASSWORD- usw. Einstellungen angegebenen Verbindungsparametern aus."manage.py syncdb
- "Erstellt die Datenbanktabellen für alle Apps in INSTALLED_APPS, deren Tabellen noch nicht erstellt wurden."Abhängigkeiten:
Credits:
@Manoj Govindan und @Mike DeSimone für sqlclear auf dbshell geleitet
@jpic für 'sed "s /"; / "CASCADE; /"'
quelle
Verwenden Sie den Befehl "python manage.py sqlflush" in Windows 10 für andere, geben Sie manage.py ein
quelle
Ich würde Ihnen empfehlen, django-extensions zu installieren und den
python manage.py reset_db
Befehl zu verwenden. Es macht genau das, was Sie wollen.quelle