2017-08-02 21 views
0

私たちは、プロジェクトのためにSQLalchemyからpeeweeに移行する必要があるかどうかを調べています。プロパティの遅延読み込みを無効にして、実行されたクエリで明示的に結合された場合にのみロードされるようにしたいと考えています。例えば:peeyeeの遅延読み込みを無効にする

for topping in Topping.select().where(Topping.stock > 0): 
     print " - %s (%s): %s pieces left" % (topping.name, topping.category.name, topping.stock) 

プリント:

  • モッツァレラ(チーズ):100個の
  • ペパロニ(肉)を左:60個は
  • を左50個は
  • バジル(ハーブ)を左

私の質問では明示的にToppingCategoryに参加しませんでしたが、名前を取得するようです。これを無効にする方法はありますか?

答えて

0

カテゴリをルックアップするために1行あたりのクエリがかかります。

FK(カテゴリ)にアクセスすると、それが利用できない場合、ピーニーがそれをロードします。これにはSELECT文が必要です。いずれかにあなたの例では

あなたが必要です:

a)に熱心カテゴリ Bをロードするカテゴリについては

)にアクセスしていない)、次のように記述します。

query = Topping.select(Topping, ToppingCategory.name).where(Topping.stock > 0) 
for topping in query: 
    print topping.name, topping.category.name 
+0

@coleiferをクリアします。私の質問は、開発者がフェッチせずにカテゴリにアクセスしようとするとエラーを発生させる方法があるかどうかです。また、オブジェクト全体をロードせずにカテゴリIDを取得する方法はありますか?ありがとう – valanto

+0

はい、カテゴリIDがデフォルトで選択されます。あなたは "topping.category_id"を使ってそれにアクセスすることができます。例外を発生させることに興味がある場合は、テストでassertQueryCountがどのように実装されているかを見ることができます。基本的には、クエリログハンドラを接続し、ログメッセージの数を調べます。また、execute_sql()をmonkeypatchすることもできます。 – coleifer

関連する問題