在Django中,如何通过manage.py命令行界面清空数据库?
我正在用Django搭建一个网站,数据库用的是MySQL。因为我还在学习,所以我需要经常修改模型,也就是数据的结构。我希望所有的表都能被清空,然后重新创建新的表。
但是,syncdb
这个命令不会去动已经存在的表。有没有更好的方法来解决这个问题呢?
5 个回答
我觉得Django的文档里明确提到,如果你想从一个空的数据库开始(这似乎是提问者的意思),那么可以直接删除并重新创建数据库,然后再运行migrate
命令,而不是使用flush
命令:
如果你想从一个空的数据库开始并重新运行所有的迁移,你应该删除并重新创建数据库,然后再运行迁移。
所以对于提问者的情况,我们只需要:
- 从MySQL中删除数据库
- 重新创建数据库
- 运行
python manage.py migrate
使用 Django Extensions,运行以下命令:
./manage.py reset_db
这会清空数据库中的表格,然后再运行:
./manage.py syncdb
这会重新创建这些表格(south 可能会要求你进行一些迁移操作)。
如果你不在乎数据:
最简单的方法就是删掉数据库,然后再运行 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 ),但我还没试过。