使用Django中的manage.py从CLI清除数据库的最简单方法是什么?

Ran*_*ngh 76 python mysql django django-1.3

我正在使用Django构建一个MySQL网站.现在我正在学习所以我需要经常更改模型,所以我希望清除所有表并创建新表.

但是syncdb不接触现有的表格.有没有更好的方法来处理这个问题?

man*_*lds 136

如果您不关心数据:

最好的方法是删除数据库并syncdb再次运行.或者你可以运行:

对于Django> = 1.5

python manage.py flush
Run Code Online (Sandbox Code Playgroud)

对于Django <1.5

python manage.py reset appname
Run Code Online (Sandbox Code Playgroud)

(您可以添加--no-input到命令的末尾,以便跳过交互式提示.)

如果你关心数据:

来自文档:

syncdb仅为尚未安装的模型创建表.它永远不会发出ALTER TABLE语句来匹配安装后对模型类所做的更改.对模型类和数据库模式的更改通常涉及某种形式的歧义,在这些情况下,Django必须猜测要进行的正确更改.存在关键数据在此过程中丢失的风险.

如果您对模型进行了更改并希望更改数据库表以匹配,请使用sql命令显示新的SQL结构,并将其与现有的表模式进行比较以计算更改.

https://docs.djangoproject.com/en/dev/ref/django-admin/

参考:FAQ - 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),但我还没试过.

  • **重置命令已弃用**.在Django 1.5中,命令已更新为"flush".尝试使用`python manage.py flush`或`python manage.py flush --noinput`跳过交互式提示. (11认同)
  • South真的非常适合自动处理迁移.需要做一些习惯,但它在开发过程中节省了大量的麻烦和重新创建数据库,并且在您的站点处于活动状态时是必须的,并且您需要在拥有宝贵数据的同时更改数据库结构. (4认同)
  • **南已被弃用**。请参阅[此处](https://south.aeracode.org/)。并且您在此处提供的链接已损坏。 (2认同)

mrm*_*oey 6

使用Django Extensions,运行:

./manage.py reset_db
Run Code Online (Sandbox Code Playgroud)

将清除数据库表,然后运行:

./manage.py syncdb
Run Code Online (Sandbox Code Playgroud)

将重新创建它们(南方可能会要求你迁移东西)。

  • @becko 首先执行:pip install django-extensions (2认同)