2015年4月10日金曜日

Djangoで、外部キーのリレーションを追跡「select_related()」

Djangoで、外部キーのリレーションを追跡「select_related()」です。非常に便利。
自動的に外部キーのリレーションを「追跡」し、クエリを実行したときにリレーショ ン先のオブジェクトも加えて選択するような QuerySet を返します。 これはパフォーマンスを向上させるための機構で、クエリは (ときに非常に) 巨大 になりますが、以後の外部キーへのリレーションでデータベースクエリが必要なく なります。
サンプルのモデル
class City(models.Model):

class Person(models.Model):
  hometown = models.ForeignKey(City)

class Book(models.Model):
  author = models.ForeignKey(Person)
クエリー部
# select_related()の場合
b = Book.objects.select_related().get(id=4)
# データベースを操作しません。
p = b.author
# データベースを操作しません。
c = p.hometown

# 通常の場合
b = Book.objects.get(id=4) 
# データベースを操作します。
p = b.author
# データベースを操作します。 
c = p.hometown

参考サイト
QuerySet API リファレンス( Django documentation)

0 件のコメント:

コメントを投稿