【问题标题】:What is the django command to delete all tables?删除所有表的django命令是什么?
【发布时间】:2012-05-23 06:31:42
【问题描述】:

有没有 django 命令

A.删除所有表

B.删除所有表中的所有数据

C.创建模型中定义的所有表?

我现在找不到这些!

我所说的命令是指那些像这样的小东西

runserver

【问题讨论】:

  • 奇怪的顺序:在步骤 A 中,您删除了所有表。在步骤 B 中,您要删除所有表中的所有数据。但是没有单个表,因为在步骤 A 中删除了所有表。我不明白 :-)
  • @guettli 哈哈!我认为 OP 没有考虑任何有意义的排序,他只是想了解所有这些。

标签: django


【解决方案1】:

A.删除所有表

manage.py sqlclear会打印删除所有表的sql语句

B.删除所有表中的所有数据

manage.py flush 将数据库返回到它在 syncdb 执行后立即所处的状态

C.创建模型中定义的所有表?

manage.py syncdb 为 INSTALLED_APPS 中尚未创建表的所有应用创建数据库表。

查看此页面以获取所有命令的参考:https://docs.djangoproject.com/en/dev/ref/django-admin/

但您绝对应该考虑使用south,正如已经提到的那样。这是管理数据库的最佳方式。

注意:自 Django 1.7 起,syncdb 已弃用,支持迁移。

【讨论】:

  • 这个问题是manage.py sqlclear 本身不起作用。您必须单独传递每个应用名称,如果您使用 syncdb,它不会反映现有模型的任何更改(这就是推荐使用南的原因)。
  • 嗯,我自己的笔记“重置”将清除整个数据库(删除表等)
  • syncdb 已被弃用,取而代之的是 migrate,因为 Django 1.7。
  • 链接到目前 404'd (south.aeracode.org/docs/about.html) 的南文档
【解决方案2】:

如果您为数据库安装了客户端库,则可以运行以下命令:

python manage.py sqlflush | python manage.py dbshell

这不会删除表,但会截断它们。

没有一个命令可以一次性完成所有操作,但是这个“一个班轮”将删除所有表,然后重新创建它们。只有在您运行在 shell 中提供这些实用程序的系统上时,它才会起作用。

echo 'from django.conf import settings; print settings.INSTALLED_APPS; quit();' | python manage.py shell --plain 2>&1 | tail -n1 | sed -r "s|^.*\((.*)\).*$|\1|; s|[',]| |g; s|django\.contrib\.||g" | xargs python manage.py sqlclear | python manage.py dbshell && python manage.py syncdb

【讨论】:

    【解决方案3】:

    manage.py sqlclearmanage.py reset 都不能一次删除所有表,两者都需要 appname 参数。

    你应该看看Django Extensions,它可以让你访问manage.py reset_db以及many other有用的管理命令。

    【讨论】:

      【解决方案4】:

      我推荐使用 django-south。它允许您将模型同步到数据库,不仅在您添加字段时,而且在您删除字段/模型时。我真的发现它是构建 Django 站点的重要组成部分。安装后,您可以运行如下命令:

      ./manage.py 迁移应用程序零

      您可以在这里了解更多信息:http://south.aeracode.org/docs/about.html

      【讨论】:

      【解决方案5】:

      还有一个更简单的 oneliner 来删除 django 1.5+ 的所有表:

      python2 manage.py sqlflush | sed 's/TRUNCATE/DROP TABLE/g'| python2 manage.py dbshell
      

      【讨论】:

        【解决方案6】:

        我能够放下我的桌子。运行

        python manage.py sqlclear appname
        

        记下给出的命令。然后运行

        python manage.py dbshell
        

        添加第一步中给出的命令。逐行。完成后,输入“.exit”(对于 SQlite3)。重新同步您的数据库,您应该一切顺利。可以肯定的是,请检查以下表格:

        python manage.py shell
        >>> from yourapp import yourclasses
        >>> yourviews.objects.all()
        

        它应该返回一个 []。我希望这会有所帮助。

        【讨论】:

          【解决方案7】:

          A 隐含 B,对吧?

          对于 A,请参阅How to drop all tables from the database with manage.py CLI in Django?

          对于 C,

          python manage.py syncdb
          

          当然,对于智能数据迁移,我使用 @bento 提到的:django-south

          【讨论】:

            猜你喜欢
            • 2010-10-06
            • 1970-01-01
            • 2018-05-27
            • 1970-01-01
            • 2016-05-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多