Djangoのオブジェクトの取得タイミング

Google App EngineではDjangoという
フレームワークを使っているのだが、
DBまわりで想定した動きがちょっと違った。


オブジェクトの取得のタイミングが
遅延型なのだ。


オブジェクトを取得する際はクエリセット
を作成するのだが、作成時には
データベースへのクエリの実施は行われない。


で、いつ実施するのかというところなのだけど
クエリセットに対してイテレーション操作を行ったときに
データベースへのクエリが実行されるのだ。
(その他いくつかの操作時にクエリが実施される)


最初知らなかったので
クエリセットのデータがいつのまにか更新されていて
なんでだ?と思ったらそれが原因だった。


ドキュメントはちゃんと読んでおくべきですね。
反省。


参考:Django データベース API リファレンス
http://michilu.com/django/doc-ja/db-api/