1. TOP
  2. ブログ
  3. Django SQL データベース DELETEによるデータ削除方法 delete() 操作 まとめ 入門

Django SQL データベース DELETEによるデータ削除方法 delete() 操作 まとめ 入門

更新日:2018年9月20日

Djangoで、モデルで定義したデータベースのテーブルからデータを削除(DELETE)する方法をDjangoの公式ドキュメントを参考にしてまとめて記載。
delete()の書き方と注意事項についてまとめています。

環境:Python3.6.5 Django2.1

delete():データを全件削除

記載例

>>> Entry.objects.all().delete()

delete():条件に合致するデータを全件削除

記載例

>>> Entry.objects.filter(pub_date__year=2005).delete()

公開日(pub_date)が2005年の記事(Entry)を全て削除。


外部キー ON DELETE CASCADE で関係づけられた他のモデルのデータも同時に削除

b = Blog.objects.get(pk=1)
# This will delete the Blog and all of its Entry objects.
b.delete()

pk=1のBlogデータを削除した場合、外部キーon_delete=models.CASCADE で参照している
他のモデルのpk=1のBlogに関係づくレコードも同時に削除されます。

例:Entryモデルのレコード:blog = ForeignKey(Blog, on_delete=models.CASCADE)
Entryモデルの関係づくデータも同時に削除。

なお、models.PROTECT の場合は、エラーとなるので、その場合は、
外部キーon_delete=models.PROTECT で参照している他のモデルのpk=1のBlogに関係づくレコードを
先に全て削除して関係づくデータがない状態であれば、pk=1のBlogデータも削除可能です。

例:Entryモデルのレコード:blog = ForeignKey(Blog, on_delete=models.PROTECT)
Entryモデルの関係づくデータを先に削除してから、Blogモデルのデータを削除する。

以上、.delete()でデータを削除できますが、マスタデータを削除する場合は 外部キー CASCADE で参照している他のモデルのデータも削除される事にご注意下さい。


B!

前の記事:Django Template(テンプレート)ifchanged、forループで前回と異なる値か判定して処理変更

次の記事:Django SQL データベース INSERT UPDATE 追加更新方法 save() create() add() update()