【问题标题】:Bulk delete objects in Django using SQLite使用 SQLite 在 Django 中批量删除对象
【发布时间】:2021-07-23 01:57:29
【问题描述】:

当我将 Django 与 SQLite 3 一起使用并尝试删除许多对象时, FilmPage.objects.all().delete(),我有时会遇到错误提示

django.db.utils.OperationalError: 表达式树太大(最大深度1000)

当我尝试限制FilmPage.objects.all()[:999].delete()的对象数量时,会报错:

AssertionError: 获取切片后无法重新排序查询。

我该如何解决这个问题?

【问题讨论】:

    标签: django sqlite


    【解决方案1】:

    Django delete() 速度慢有两个原因:

    1. 当你执行删除方法时,Django 必须确保级联功能和外键引用

    2. Django 必须处理signals 相关的问题,例如post_savepre_save

    由于您知道模型级联、信号和所有外键关系,您可以使用_raw_delete API 执行批量删除。

    像这样:

    queryset._raw_delete(queryset.db)
    

    更多详情可以在这里找到:https://docs.djangoproject.com/en/3.2/topics/db/queries/#deleting-objects

    还可以了解有关批量删除的这张票:https://code.djangoproject.com/ticket/9519

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-23
      • 2011-03-08
      • 2018-11-05
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 2021-06-19
      • 2017-04-13
      相关资源
      最近更新 更多