Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Django中的manage.py从CLI清除数据库的最简单方法是什么?_Python_Mysql_Django_Django 1.3 - Fatal编程技术网

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

Python 使用Django中的manage.py从CLI清除数据库的最简单方法是什么?,python,mysql,django,django-1.3,Python,Mysql,Django,Django 1.3,我正在使用Django用MySQL建立一个网站。现在,随着我的学习,我需要经常更改模型,以便清除所有表并创建新表 但是syncdb不涉及现有的表。有没有更好的方法来处理此问题?如果您不关心数据: 最好的方法是删除数据库并再次运行syncdb。或者您可以运行: 对于Django>=1.5 python manage.py flush 对于Django

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


但是
syncdb
不涉及现有的表。有没有更好的方法来处理此问题?

如果您不关心数据:

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

对于Django>=1.5

python manage.py flush
对于Django<1.5

python manage.py reset appname
(您可以在命令末尾添加
--no input
,使其跳过交互式提示。)

如果您确实关心数据:

从文档中:

syncdb将仅为创建表 尚未发布的模型 安装。它永远不会发行 表语句以匹配所做的更改 安装后,将其复制到模型类。 对模型类和数据库的更改 模式通常涉及某种形式的 模棱两可,在这种情况下,还有Django 你必须猜出正确的答案 要做的更改。存在这样一种风险: 关键数据将在存储过程中丢失 过程

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

参考:常见问题-

人们也推荐South(),但我没有尝试过。

最快(删除并创建所有表,包括数据):

警告:

  • 可能无法在Windows上正常工作
  • 可能会在数据库中保留一些旧表
使用、运行:

./manage.py reset_db
将清除数据库表,然后运行:

./manage.py syncdb
将重新创建它们(south可能会要求您迁移东西)。

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

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

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

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

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

    例如:

  • 首先,使用终端/命令行安装django turncate:
  • pip安装django truncate
    
  • 将“django_truncate”添加到
    settings.py
    文件中已安装的_应用程序中:
  • 在终端中使用此命令可从应用程序中删除表格的所有数据
  • python manage.py truncate--apps app_name--models table_name
    
    reset
    已运行SQL,因此无需通过管道连接到
    dbshell
    。如果使用
    sqlreset
    命令,则只需打印出SQL,您可以通过管道将其发送到shell执行,但这是一个不必要的步骤。South非常适合自动处理迁移。需要一点时间来适应,但它可以在开发过程中省去大量删除和重新创建数据库的麻烦,而且一旦您的站点处于活动状态,并且您需要在数据库中有宝贵数据的情况下更改数据库结构时,它将是一个必备工具。RESET命令已折旧。在Django 1.5中,命令已更新为
    flush
    。尝试使用
    python manage.py flush
    python manage.py flush--noinput
    跳过交互式提示。South已被弃用。参考您在这里给出的链接已断开。根据@becko的命令,该命令现在似乎是
    django admin flush
    :pip安装django扩展
    ./manage.py syncdb
    
    INSTALLED_APPS = [
        ...
        'django_truncate',
    ]