2014-02-14 50 views
1

加盟後當我加入using語句兩個表(對象)作爲如何解決ambigious科拉姆在SQLAlchemy的

session.query(object, robject).filter(getattr(object.c, "hid")==getattr(robject.c,\ 
)).subquery() 

結果列引用「藏」是模糊的,因爲兩個表具有HID列。 我應該如何解決這個問題?

感謝

回答

0

你通常希望名字只有那些你需要(因爲SUBQ不是用來裝載滿對象)然後您可以爲任何額外的使用標籤()列的子查詢:

subq = sess.query(object.a, object.b, object.hid.label('o_hid'), 
        robject.c, robject.hid.label('r_hid')).filter(..).subquery() 

子查詢的名字,然後根據標籤名稱的列:

query(Something).join(subq, subq.c.o_hid == Something.q).filter(subq.c.r_hid == 5) 
+0

標籤創建別名,但不刪除原始HID列。他們仍然有衝突。我認爲我們需要一個像rename這樣的命令來重命名列而不是別名。 – Sandeep

+0

在類似於'session.query(MyTable).join(MyTable.relation).filter_by(ambiguous_column ='something')的查詢中,SQL Alchemy 1.0.14只是從關係的另一端任意取得'ambiguous_column',而沒有任何投訴。如果我把'join'放在'filter_by'之後,它會從第一個表格,即'MyTable'!這是一個錯誤還是一個特徵?!?! – Mahdi

+0

這是[功能](http://docs.sqlalchemy.org/en/latest/orm/query.html?highlight=filter_by#sqlalchemy.orm.query.Query.filter_by)。 「關鍵字表達式是從查詢的主要實體中提取的,或者是對Query.join()的調用的目標的最後一個實體。」 – zzzeek