当我将Django与SQLite 3一起使用并试图删除许多对象时,FilmPage.objects.all().delete()
,我有时会遇到一个错误,上面写着
django.db.utils.OperationalError:表达式树太大(最大深度1000(
当我试图限制对象FilmPage.objects.all()[:999].delete()
的数量时,我会得到一个错误:
断言错误:一旦切片,就无法对查询进行重新排序。
如何解决此问题?
delete()
的速度较慢有两个原因:
Django在执行删除方法时必须确保级联功能和外键引用
Django必须处理与
signals
相关的问题,如post_save
和pre_save
如您所知,您的模型级联、信号和所有外键关系,您可以使用_raw_delete
API执行批量删除。
像这样:
queryset._raw_delete(queryset.db)
更多详细信息,请点击此处:https://docs.djangoproject.com/en/3.2/topics/db/queries/#deleting-对象
还要了解有关批量删除的此票证:https://code.djangoproject.com/ticket/9519