Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django表根据视图中的DB类型截断_Django - Fatal编程技术网

Django表根据视图中的DB类型截断

Django表根据视图中的DB类型截断,django,Django,根据视图中的数据库类型,在Django ORM中截断表的最快方法是什么?例如,我知道你可以做到这一点 Books.objects.all().delete() 但对于包含数百万行的表,速度非常慢。我知道也可以使用游标和一些自定义SQL from django.db import connection cursor = connection.cursor() cursor.execute("TRUNCATE TABLE `books`") 但是,TRUNCATE命令不适用于SQLite。如果数

根据视图中的数据库类型,在Django ORM中截断表的最快方法是什么?例如,我知道你可以做到这一点

Books.objects.all().delete()
但对于包含数百万行的表,速度非常慢。我知道也可以使用游标和一些自定义SQL

from django.db import connection
cursor = connection.cursor()
cursor.execute("TRUNCATE TABLE `books`")
但是,TRUNCATE命令不适用于SQLite。如果数据库移动到另一个db类型,我需要对此进行说明

有什么想法吗?直接删除表并在我的视图中重新创建会更容易吗?

Django的
.delete()
方法确实非常慢,因为它加载每个被删除对象的ID,这样就可以发出
post\u save
信号

这意味着一个简单的
connection.execute(“DELTE FROM foo”)
将大大快于
foo.objects.delete()


如果这仍然太慢,那么截断或删除+重新创建绝对是一种方法。您可以获得用于创建表的SQL,其中有:
output,references=connection.creation.SQL\u create\u model(model,style)
,其中
style=django.core.management.color\u style()
(这是从中提取的)。

很高兴我能提供帮助:)现在,我的$0.02关于使用SQLite的说明:如果您只是在开发过程中使用它(即,因为它比运行“完整”数据库(如Postgres或MySQL)更简单),我建议不要这样做。我喜欢SQLite,过去在开发中大量使用它,但最终意识到我花在维护SQLite兼容性上的时间比它节省下来的时间要多,所以现在我只是到处使用Postgres,我对此感到高兴。当然,有很好的理由忽略我所说的。这就是我的0.02美元。好观点!是的,我正在使用SQLite进行开发。不过,我会采纳你的建议,安装一些更健壮的东西,比如Postgres。再次感谢你!没问题!而且,开发中的ya-Postgres并不适合所有人,只要确保你对它很明智,并考虑到你在支持SQLite上花费的时间与使用它所花费的时间图普博士后||