使用SQLite批量删除Django中的对象



当我将Django与SQLite 3一起使用并试图删除许多对象时,FilmPage.objects.all().delete(),我有时会遇到一个错误,上面写着

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

当我试图限制对象FilmPage.objects.all()[:999].delete()的数量时,我会得到一个错误:

断言错误:一旦切片,就无法对查询进行重新排序。

如何解决此问题?

Djangodelete()的速度较慢有两个原因:
  1. Django在执行删除方法时必须确保级联功能和外键引用

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

如您所知,您的模型级联、信号和所有外键关系,您可以使用_raw_deleteAPI执行批量删除。

像这样:

queryset._raw_delete(queryset.db)

更多详细信息,请点击此处:https://docs.djangoproject.com/en/3.2/topics/db/queries/#deleting-对象

还要了解有关批量删除的此票证:https://code.djangoproject.com/ticket/9519

最新更新