2017-03-05 97 views
0

混淆處理查詢對象的結果。在這個例子中,我沒有使用外鍵。無法訪問SQLAlchemy查詢結果中的別名字段?

lookuplocation = aliased(ValuePair) 

lookupoccupation = aliased(ValuePair) 

persons = db.session.query(Person.lastname, lookuplocation.displaytext, lookupoccupation.displaytext).\ 
     outerjoin(lookuplocation, Person.location == lookuplocation.valuepairid).\ 
     outerjoin(lookupoccupation, Person.occupation1 == lookupoccupation.valuepairid).all() 

就數據而言結果是正確的。但是,當我嘗試訪問單行數據時,我遇到了一個問題:

persons [0] .lastname按我的預期工作並返回數據。

但是,結果中有一個person.displaytext,但由於我使用了displaytext實體的別名,我只得到一個結果。我明白爲什麼我會得到結果,但我需要知道用什麼別名字段名來獲取兩個displaytext列。

通過上述產生的實際的SQL語句加入如下:

SELECT person.lastname AS person_lastname, valuepair_1.displaytext AS valuepair_1_displaytext, valuepair_2.displaytext AS valuepair_2_displaytext 
FROM person LEFT OUTER JOIN valuepair AS valuepair_1 ON person.location = valuepair_1.valuepairid LEFT OUTER JOIN valuepair AS valuepair_2 ON person.occupation1 = valuepair_2.valuepairid 

但是,這些「作爲」字段名的結果提供給我。

我是SqlAlchemy的新手,所以很可能這是一個「新手」問題。

感謝。

回答

0

對不起 - RTFM問題 - 應該是:

lookuplocation.displaytext.label( 「myfield1」), lookupoccupation.displaytext.label( 「myfield2」)

結果返回參照場後person.myfield

簡單。