什么是删除所有数据表的 Django 命令?

35

有没有Django命令可以:

A. 删除所有表

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

C. 根据模型定义创建所有表?

我现在找不到这些命令!

我指的是那些像……的小东西。

runserver

等等


1
请查看以下内容 - https://dev59.com/cXA75IYBdhLWcg3wOGPS - zubinmehta
奇怪的顺序:在步骤A中,您删除了所有表。在步骤B中,您想要删除所有表中的所有数据。但是由于在步骤A中删除了所有表,因此没有单个表存在。我不明白 :-) - guettli
1
@guettli 哈哈!我认为 OP 没有考虑任何有意义的排序,他只是想知道它们全部。 - Sнаđошƒаӽ
7个回答

39

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 这样的工具来管理数据库。

N.B: 自Django 1.7起,syncdb已被弃用,应使用迁移(migrate)。


4
问题在于,单独使用 manage.py sqlclear 是无法起作用的。您需要逐个传递每个应用程序名称,如果使用 syncdb,它不会反映现有模型中的任何更改(这就是为什么建议使用 south 的原因)。 - Burhan Khalid
哦,为了我的笔记,“重置”将清除整个数据库(删除表等)。 - bharal
3
自Django 1.7版本起,syncdb已被弃用,建议使用migrate命令。 - Jonathan Hartley
南方文档的链接目前已经无法访问(http://south.aeracode.org/docs/about.html)。 - There

14
如果你已经安装了适用于你的数据库的客户端库,那么可以运行以下命令:
``` python manage.py sqlflush | python manage.py dbshell ```
这不会删除表,而是将它们截断。
虽然没有一条命令可以完成所有操作,但这个“单行命令”可以删除所有表,然后重新创建它们。这只有在你正在运行提供这些实用程序的系统上才能起作用。
``` 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 ```

11

4

我建议使用django-south。它不仅可以在添加字段时将模型与数据库同步,还可以在删除字段/模型时同步。我发现它是构建Django网站的必要组件. 一旦安装,你可以运行像这样的命令:

./manage.py migrate app zero

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


南方文档的链接目前已经404了(http://south.aeracode.org/docs/about.html)。 - There

4

对于Django 1.5+,有一个更简单的一行代码来删除所有表格:

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

2
我成功删除了我的数据表。运行:
python manage.py sqlclear appname

请注意给出的命令,然后运行它们。

python manage.py dbshell

逐行添加第一步给出的命令。完成后,输入'.exit'(对于SQlite3)。重新同步您的数据库,然后你就可以正常使用了。为了确保,使用以下命令检查表格:

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

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接