删除所有表的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 sqlclear
和 manage.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命令是啥?的主要内容,如果未能解决你的问题,请参考以下文章
删除所有表以在 Django 中运行 syncdb 的最简单方法?