9

同じ名前のテーブルにマップされたマップされたクラスUserと、彼の年齢の列「年齢」があるとします。私は今、次の問題に興味があります。

私のアプリケーションの過程で、2 つのクエリが表示されます。

q1 = session.query(User).filter(lots of conditions)
q2 = session.query(User).filter(lots of other conditions)

同じ年齢であるという条件で、q2をq1に「結合」したいと思います。しかし、これがどのように機能するかはわかりません。私は成功せずに次のことを試しました:

q1.join(q2.subquery(), q1.age==q2.age) # the query doesn't hold the columns of the queried class
q1.join(Age).join(q2.subquery()) # Works only if age is a relationship with mapped class Age

私の最も近い電話は次のようなものでした:

a1 = aliased(User)
a2 = aliased(User)
q1 = session.query(a1)
q2 = session.query(a2)
s = q2.subquery()
q1.join(s, a1.age==a2.age).all()
>>> sqlalchemy.exc.OperationalError: (OperationalError) no such column: user_2.age 'SELECT user_1.id AS user_1_id, user_1.name AS user_1_name, user_1.age AS user_1_age \nFROM user AS user_1 JOIN (SELECT user_2.id AS id, user_2.name AS name, user_2.age AS age \nFROM user AS user_2) AS anon_1 ON user_1.age = user_2.age' ()

これを実行する方法についてのアイデアはありますか?

4

1 に答える 1

13

サブクエリに関する質問への回答をいじって読んだ後、なんとか解決策を見つけることができました。問題のある最後の行の代わりに、次のように入力します。

q1.join(s, a1.age==s.columns.age).all()

そうすれば、 on 節は になりON user_1.age = anon_1.age、これが私たちが望むものです。

于 2012-11-21T18:36:46.707 に答える