2011-04-23 22 views

回答

10

sqlclear管理命令可以幫助...

Usage: ./manage.py sqlclear [options] <appname appname ...> 

Prints the DROP TABLE SQL statements for the given app name(s). 

爲PostgreSQL裏你可以這樣做:

./manage.py sqlclear myapp | psql dbname 

UPDATE 與遷移和Django的1.7+應用:

python manage.py migrate <app> zero 
+1

不幸的是,sqlclear似乎沒有可用於遷移應用程序(Django的1.8)... 「CommandError:應用程序‘DB’具有遷移只有sqlmigrate和sqlflush命令可以當一個應用程序使用有移民。「 – 2016-01-23 08:15:41

+4

適用於遷移和Django 1.7+的應用程序:python manage.py migrate zero – Jerzyk 2016-02-01 01:04:31

+0

python manage.py migrate zero後面跟着python manage.py migrate 爲我工作過......我錯誤地認爲我需要重新應用遷移? – Foon 2017-08-26 02:14:58

0

我還需要只能清空某些應用程序。我想出了這個解決方案。這適用於MySQL。可能需要爲其他數據庫更改代碼。

主要的想法是不做整個'沖水'。相反,我只用'sqlflush'的grep來得到我想要的。您也可以將所有內容放在一行中。爲了便於閱讀,我將其分開。

BEGIN="BEGIN; SET FOREIGN_KEY_CHECKS = 0;" 
TRUNCATE=`./manage.py sqlflush |egrep " \\\`app1_| \\\`app2_"` 
END="SET FOREIGN_KEY_CHECKS = 1; COMMIT;" 

echo $BEGIN $TRUNCATE $END | ./manage.py dbshell 
+0

從Django版本1.6開始,'TRUNCATE'命令列出**在同一行上的所有表**,因此您在此處使用的腳本將**截斷所有內容**。也許早期的Django版本爲每個表格提供了一個'TRUNCATE',但現在不再是這種情況。 – Louis 2014-12-19 13:17:03

1

更高版本的Django的嘗試在運行Django shell:

from django.apps import apps 
my_app = apps.get_app_config('my_app_name') 
my_models = my_app.get_models() 
for model in my_models: 
    model.objects.all().delete() 

更多的apps模塊上都可以找到here。 當然,您可以使用管理infrastructure將其自動轉換爲管理命令。

+0

更容易。在1.10.4上工作得很好。謝謝。如果移民衝突,這是最好的替代方案。 – Yash 2016-12-15 13:59:37

9

您可以用migrate命令,它有兩個位置參數做到這一點:

Updates database schema. Manages both apps with migrations and those without.

positional arguments:

app_label
App label of an application to synchronize the state.
migration_name
Database state will be brought to the state after that migration. Use the name "zero" to unapply all migrations.

所以運行後跟一個遷移將清除只爲給定的應用程序中的數據遷移爲零。

$ python manage.py migrate ${APPNAME} zero 
$ python manage.py migrate ${APPNAME}  
相關問題