我正在使用Django用MySQL建立网站。现在,我正在学习,所以我需要经常更改模型,以便我希望清除所有表并创建新表。
但syncdb
不涉及现有表。有没有更好的方法来解决此问题?
Answers:
如果您不关心数据:
最好的方法是删除数据库并syncdb
再次运行。或者您可以运行:
对于Django> = 1.5
python manage.py flush
对于Django <1.5
python manage.py reset appname
(您可以将其添加--no-input
到命令的末尾以跳过交互式提示。)
如果您确实关心数据:
从文档:
syncdb将仅为尚未安装的模型创建表。安装后,它将永远不会发出ALTER TABLE语句来匹配对模型类所做的更改。对模型类和数据库模式的更改通常涉及某种形式的歧义,在这种情况下,Django必须猜测要进行的正确更改。在此过程中可能会丢失关键数据。
如果对模型进行了更改,并希望更改数据库表以使其匹配,请使用sql命令显示新的SQL结构,并将其与现有的表模式进行比较以得出更改。
https://docs.djangoproject.com/en/dev/ref/django-admin/
参考:常见问题解答-https: //docs.djangoproject.com/en/dev/faq/models/#if-i-make-changes-to-a-model-how-do-i-update-the-database
人们还推荐South(http://south.aeracode.org/docs/about.html#key-features),但我还没有尝试过。
flush
。尝试使用python manage.py flush
或python manage.py flush --noinput
跳过交互式提示。
使用Django Extensions,运行:
./manage.py reset_db
将清除数据库表,然后运行:
./manage.py syncdb
将重新创建它们(南方可能会要求您迁移事物)。
最快(删除并创建包括数据的所有表):
./manage.py reset appname | ./manage.py dbshell
警告:
reset
已经运行了SQL,因此无需通过管道传递到dbshell
。如果使用该sqlreset
命令,则只会打印出SQL,您可以将其通过管道传输到Shell以执行,但这是不必要的步骤。
您可以使用Django-Truncate库删除表的所有数据,而不破坏表结构。
例:
pip install django-truncate
settings.py
文件中的“ INSTALLED_APPS”中添加“ django_truncate” :INSTALLED_APPS = [
...
'django_truncate',
]
python manage.py truncate --apps app_name --models table_name