の前.all
は再利用可能ですが、.all
評価がトリガーされ、結果が石に設定されます。私のアドバイスは.all
、クエリを再利用する場合は決して保存せず、データが必要な場合にのみ使用することです (これが遅延評価の全体的なポイントであり、本当に必要な場合にのみデータをフェッチします)。
それ以外の:
list_of_games = session.query(Game_Table).all()
list_of_games.filter(name=="stuff").all()
使用する:
list_of_games = session.query(Game_Table)
list_of_games.all()
list_of_games.filter(name=="stuff").all()
[アップデート]
だから、私がやりたいことをする方法がないように聞こえますか?– アップルラバー
私の知る限り、結果ではなく、メソッドチェーンクエリのみを実行できます。そしてそれは理にかなっています: 結果が既にメモリにあるのに、なぜデータベースへのラウンドトリップを支払うのでしょうか? 純粋な Python でのフィルタリング/順序付けは、より安価になります。
# old school lisper style.
sorted(list_of_games, key=lambda x: x.name)
filter(lambda x: x.name=='stuff', list_of_games)
# new style
[x for x in list_of_games if x.name=='stuff']
結果を反復するだけの場合は、ジェネレーター式にします。結果が大きい場合でも、データベースに再度アクセスするよりもコストがかかりません。
for game in (x for x in list_of_games if x.name=='stuff'):
print_score(game)