Django: 強制的にINSERTする方法

2012/02/18

Djangoでは、save()を使ってレコードを作成したり更新したりすると思います。

オブジェクトが新規作成される場合はINSERT。そうでない場合はUPDATEとDjango側が自動的に切り分けてくれます。

これは、DBレイヤーでは、

  • オブジェクトが持つ主キーがDB中に存在しない=INSERT
  • オブジェクトが持つ主キーがDB中に存在する=UPDATE

ということをしてくれています。

 

でも、毎回必ずINSERTしたい場合はどうでしょう?

その場合は、

  • create()
  • save(force_insert=True)

のいずれかで対応出来できます。

主キーが重複した場合はsave() / create()できず、「IntegrityError」例外が発生します。

http://djangoproject.jp/doc/ja/1.0/ref/models/querysets.html

 

save()やcreate()時に明示的に例外を発生させたい場合がシチュエーションによってはあろうかと思います。

そんなときは、上記の方法を試してみて下さい。

blog comments powered by Disqus
カテゴリー