2017-11-11 5 views
1

こんにちは、私はsqlalchemy遅延ロードがどのように機能するのか理解したいと思いますか?私はこのクエリを持っていると仮定するとSQLAlchemy LazyLoadingの動作方法

私はこれが新しいselect文を作成するループのためにparent.childrenへのアクセスかどうかを知りたい
results = (
     session.query(Parent). 
      options(lazyload(Parent.children)). 
      filter(Parent.id == 1). 
      all() 
    ) 

    for parent in results: 
     logging.error(parent.children) 

?またはすでにレコードされているか親であるか、何かがキャッシュされているか?これがパフォーマンスにどのように影響するか考えています。私はほとんどの方法を最適化したい。

  1. lazyloadingを使用する必要がありますか?
  2. ループ上の項目ごとにアクセスすると、新しいsqlalchemyが作成されます
  3. クエリがsqlalchemyによって実行されているかどうかを確認するにはどうすればよいですか? (ただ、エントリーごとにアクセスすると、SELECT文たぶん

答えて

1
  1. を作成するかどうかを確認したい。
  2. 新しいクエリを発行意味するか?答えはそれがlazyload()のポイントだ、yesである。関係コレクションたとえば、最初にアクセスしたときにlazilyに属性が設定されていますが、N + 1の状況を回避したい場合は、代わりにjoinedload()を使用して同じクエリで子を設定することができます。
  3. loggingを使用します。あなたのエンジン構成にecho=Trueを渡してください。
関連する問題