删除所有表的django命令是啥?

Posted

技术标签:

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

有没有 django 命令

A.删除所有表

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

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

我现在找不到这些!

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

runserver

【问题讨论】:

看看这个 - ***.com/questions/3414247/… 奇怪的顺序:在步骤 A 中,您删除了所有表。在步骤 B 中,您要删除所有表中的所有数据。但是没有单个表,因为在步骤 A 中删除了所有表。我不明白 :-) @guettli 哈哈!我认为 OP 没有考虑任何有意义的排序,他只是想了解所有这些。 【参考方案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

【讨论】:

链接到目前 404'd (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

【讨论】:

以上是关于删除所有表的django命令是啥?的主要内容,如果未能解决你的问题,请参考以下文章

删除表的记录的sql命令是啥?

查找表的所有外键的最有效方法是啥?

删除所有表以在 Django 中运行 syncdb 的最简单方法?

返回表的字段名称的 SQL 命令是啥?

在一个命令中删除所有表而不删除 django dbshel​​l 中的 postgres 中的数据库?

Linux里面iptables -F作用是啥?