本文介紹 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。