在Django中,如何通过manage.py命令行界面清空数据库?

113 投票
5 回答
174451 浏览
提问于 2025-04-16 20:19

我正在用Django搭建一个网站,数据库用的是MySQL。因为我还在学习,所以我需要经常修改模型,也就是数据的结构。我希望所有的表都能被清空,然后重新创建新的表。

但是,syncdb这个命令不会去动已经存在的表。有没有更好的方法来解决这个问题呢?

5 个回答

4

我觉得Django的文档里明确提到,如果你想从一个空的数据库开始(这似乎是提问者的意思),那么可以直接删除并重新创建数据库,然后再运行migrate命令,而不是使用flush命令:

如果你想从一个空的数据库开始并重新运行所有的迁移,你应该删除并重新创建数据库,然后再运行迁移。

所以对于提问者的情况,我们只需要:

  1. 从MySQL中删除数据库
  2. 重新创建数据库
  3. 运行python manage.py migrate
6

使用 Django Extensions,运行以下命令:

./manage.py reset_db

这会清空数据库中的表格,然后再运行:

./manage.py syncdb

这会重新创建这些表格(south 可能会要求你进行一些迁移操作)。

212

如果你不在乎数据:

最简单的方法就是删掉数据库,然后再运行 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 ),但我还没试过。

撰写回答