我写了一个简单的脚本来填充用Django模型创建的表。我确实在开发过程中犯了错误,并且我的表中的数据已损坏(它可以访问,但有错误的图像,名称,URL)。我想删除这些数据并开始填充,但如果我只使用pk=1
,它看起来像表存储以前的主键(因此新对象不会从Model.objects.all().delete()
开始)。
如何在没有DROP TABLE
的情况下删除所有以前的数据?如果DROP
是最方便的方式,那么这个Django : Table doesn't exist恢复解决方案是唯一的解决方案吗?
所需的功能是在每个脚本运行之前自动擦除数据。提前谢谢。
答案 0 :(得分:2)
您可以使用flush
从数据库中删除所有数据并重新执行任何后同步处理程序。已应用迁移的表格未清除。
通过manage.py flush
有没有办法只为表集使用flush,而不是数据库?
不,不是真的。 Flush有一个选项可以指定您正在刷新的数据库(-database
),但是您无法指定某些表,因为这可能会破坏表之间的关系,从而使数据无效。
如果你真的需要这样做,你当然可以创建自己的命令,只是通过表并删除对象,但这当然不会执行刷新的post-synchronization
步骤
答案 1 :(得分:0)
有一种方法可以只删除给定django应用程序的表而不是整个数据库:您可以使用dbshell
并将其传递给python manage.py sqlclear app_name | python manage.py dbshell
管理命令。
list-style-type: devanagari;
仅当应用程序没有迁移时才能应用该命令。请参阅here更多信息。
答案 2 :(得分:0)
在使用loaddata将数据回传到测试环境之前,我还需要一种清除特定表的方法。这适用于特定的表:
echo "delete from my_table" | python manage.py dbshell