1
SQLAlchemy Beaker Caching exampleの関数_params_from_query
を使用して、キャッシュに使用するSQLAlchemyクエリパラメータ値を抽出しようとしています。SQLAlchemy:サブクエリ内のbindparam値をトラバースする方法は?
残念ながら、私はサブクエリを含むクエリでそれを試してみると、サブクエリを無視してメインクエリパラメータをたどるだけのようです。
次のコード例は、SQLAlchemyディストリビューションのbeaker_cache
サンプルフォルダーから実行した場合にこれを示しています。
from environment import Session
from model import Person
from caching_query import _params_from_query
s = Session.query(Person.name).filter(Person.name=="subquery value").subquery()
q = Session.query(s.c.name).filter(s.c.name=="main query value")
print q.params()
print
print _params_from_query(q)
# SELECT anon_1.name AS anon_1_name
# FROM (SELECT person.name AS name
# FROM person
# WHERE person.name = :name_1) AS anon_1 <- two
# WHERE anon_1.name = :name_2 <- parameters
#
# ['main query value'] <- only one value
機能を間違って使用していますか?サブクエリからパラメータ値を取得するにはどうすればよいですか?
それは素晴らしいです。私は警告を得るのを続けていたので、「警告をキャッチするブロック」(http://stackoverflow.com/a/5225951/201665)に「トラバース」をラップすることにしました。 '' joinedload''を含んだクエリであれば、同じキーで別のカラムに置き換えられます。 –
ああ、それをしないようにする方法がある...あなたはquery.with_labels()と言うだろう。statement – zzzeek
素晴らしい、ありがとう! –