本文介绍 django.db.models.query.QuerySet.delete
的用法。
声明
delete()
对
中的所有行执行 SQL 删除查询,并返回删除的对象数和包含每个对象类型的删除数的字典。QuerySet
delete()
立即应用。您不能在已获取切片或无法再被过滤的
上调用 QuerySet
delete()
。
例如,要删除特定博客中的所有条目:
>>> b = Blog.objects.get(pk=1)
# Delete all the entries belonging to this Blog.
>>> Entry.objects.filter(blog=b).delete()
(4, {'blog.Entry': 2, 'blog.Entry_authors': 2})
默认情况下,Django 的
模拟 SQL 约束 ForeignKey
ON DELETE CASCADE
— 换句话说,任何具有指向要删除对象的外键的对象都将与它们一起被删除。例如:
>>> blogs = Blog.objects.all()
# This will delete all Blogs and all of their Entry objects.
>>> blogs.delete()
(5, {'blog.Blog': 1, 'blog.Entry': 2, 'blog.Entry_authors': 2})
此级联行为可通过
参数自定义到 on_delete
。ForeignKey
delete()
方法执行批量删除,并且不会在您的模型上调用任何 delete()
方法。但是,它会为所有已删除对象(包括级联删除)发出
和 pre_delete
信号。post_delete
Django 需要将对象提取到内存中以发送信号和处理级联。但是,如果没有级联也没有信号,那么 Django 可能会采用 fast-path 并删除对象而不提取到内存中。对于大型删除,这可能会显著减少内存使用量。执行查询的数量也可以减少。
ForeignKeys 设置为
on_delete
DO_NOTHING
不会阻止删除 fast-path。
请注意,对象删除中生成的查询是可能更改的实现细节。
相关用法
- Python Django QuerySet.defer用法及代码示例
- Python Django QuerySet.dates用法及代码示例
- Python Django QuerySet.distinct用法及代码示例
- Python Django QuerySet.difference用法及代码示例
- Python Django QuerySet.select_related用法及代码示例
- Python Django QuerySet.union用法及代码示例
- Python Django QuerySet.latest用法及代码示例
- Python Django QuerySet.values用法及代码示例
- Python Django QuerySet.intersection用法及代码示例
- Python Django QuerySet.get用法及代码示例
- Python Django QuerySet.none用法及代码示例
- Python Django QuerySet.exclude用法及代码示例
- Python Django QuerySet.get_or_create用法及代码示例
- Python Django QuerySet.update_or_create用法及代码示例
- Python Django QuerySet.prefetch_related用法及代码示例
- Python Django QuerySet.first用法及代码示例
- Python Django QuerySet.annotate用法及代码示例
- Python Django QuerySet.values_list用法及代码示例
- Python Django QuerySet.select_for_update用法及代码示例
- Python Django QuerySet.order_by用法及代码示例
- Python Django QuerySet.bulk_update用法及代码示例
- Python Django QuerySet.in_bulk用法及代码示例
- Python Django QuerySet.aggregate用法及代码示例
- Python Django QuerySet.reverse用法及代码示例
- Python Django QuerySet.count用法及代码示例
注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.db.models.query.QuerySet.delete。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。