gpt4 book ai didi

Django 表 TRUNCATE 基于 View 中的 DB 类型

转载 作者:行者123 更新时间:2023-12-04 05:04:19 26 4
gpt4 key购买 nike

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

Books.objects.all().delete()

但是对于包含数百万行的表,它非常慢。我知道也可以使用游标和一些自定义 SQL
from django.db import connection
cursor = connection.cursor()
cursor.execute("TRUNCATE TABLE `books`")

但是,TRUNCATE 命令不适用于 SQLite。如果数据库移动到另一个数据库类型,我需要考虑到这一点。

有任何想法吗?只是删除表并在我的 View 中重新创建会更容易吗?

最佳答案

Django 的.delete()方法确实很慢,因为它加载了每个被删除对象的 ID,因此 post_save可以发出信号。

这意味着一个简单的 connection.execute("DELTE FROM foo")将明显快于 Foo.objects.delete() .

如果这仍然太慢,截断或删除+重新创建绝对是要走的路。您可以获得用于创建表的 SQL:output, references = connection.creation.sql_create_model(model, style) , 其中 style = django.core.management.color_style() (取自 https://github.com/django/django/blob/master/django/core/management/sql.py#L14 )。

关于Django 表 TRUNCATE 基于 View 中的 DB 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15723052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com