Django表根据视图中的DB类型截断
根据视图中的数据库类型,在Django ORM中截断表的最快方法是什么?例如,我知道你可以做到这一点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。如果数
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上花费的时间与使用它所花费的时间图普博士后||