# ORM version: T1 and T2 are mapped classes
q_old = session.query(T1, T2).filter(T1.id == T2.id).filter("mycondition")
print q_old
q_new = session.query(T1, T2).join(T2, T1.id == T2.id).filter("mycondition")
print q_new
# Core version: T1 and T2 are Table(...)
s_old = select("*").select_from(T1).where("mycondition")
print s_old
s_new = select("*").select_from(T1.join(T2, T1.c.id==T2.c.id)).where("mycondition")
print s_new
我會建議不要使用SELECT *
,但並建議使用select([T1, T2])
代替。
更新:爲了從s_old去s_new你可以嘗試以下方法:
assert len(s_old._from_obj) == 1
T1inferred = s_old._from_obj[0]
s_upd = s_old.select_from(T1inferred.join(T2, T1inferred.c.id==T2.c.id))
print s_upd
基本上你嘗試從給定的s_old
所以T1
,你可以構建一個聯接,而where
條件將被保留。 請注意,SELECT *
現在將返回T1
和T2
的列。
來源
2014-01-19 12:18:30
van
嗨範謝謝你的回答,但請看我的說明 - 我需要修改一個已經存在的表達式。就您的解決方案而言,我已經擁有s_old,並且我無法訪問'mycondition',因此我無法從頭開始重新構建表達式。 – jl6
我明白了,請參閱答案的**更新**部分。 – van