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

时间:2011-06-26 16:15:56

标签: python mysql django django-1.3

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

syncdb不会触及现有表格。有没有更好的方法来处理这个问题?

5 个答案:

答案 0 :(得分:127)

如果您不关心数据:

最好的方法是删除数据库并再次运行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),但我没有尝试过。

答案 1 :(得分:4)

使用Django Extensions,运行:

./manage.py reset_db

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

./manage.py syncdb

会重新创建它们(南方可能会要求您迁移它们)。

答案 2 :(得分:3)

我认为Django docs明确提到如果意图是从空DB开始(这似乎是OP的意图),那么只需删除并重新创建数据库并重新运行migrate(而不是使用flush):

  

如果您希望从空数据库开始并重新运行所有数据库   迁移时,您应该删除并重新创建数据库,然后运行   而是迁移。

因此,对于OP的情况,我们只需要:

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

答案 3 :(得分:0)

最快(删除并创建包括数据在内的所有表格):

./manage.py reset appname | ./manage.py dbshell

注意:

  • 可能无法在Windows上正常工作。
  • 可能会在db
  • 中保留一些旧表

答案 4 :(得分:0)

您可以使用Django-Truncate库删除表的所有数据,而不会破坏表结构。

示例:

  1. 首先,使用终端/命令行安装django-turncate:
pip install django-truncate
  1. settings.py文件中的“ INSTALLED_APPS”中添加“ django_truncate”:
INSTALLED_APPS = [
    ...
    'django_truncate',
]
  1. 在终端中使用此命令从应用程序中删除表的所有数据。
python manage.py truncate --apps app_name --models table_name