2013-10-14 44 views
7

我想從peewee單獨的表中選擇兩個字段。我相信我的問題是迭代結果對象。Python peewee - 從多個表中選擇

我在Python下面的代碼:

sHeader_Value = (System_Headers 
    .select(System_Headers.SystemHeader_Name, System_Data.System_Value) 
    .join(System_Header_Link) 
    .join(System_Data_Link) 
    .join(System_Data)) 

該代碼生成以下SQL:

SELECT t1.`SystemHeader_Name`, t4.`System_Value` 
FROM `system_headers` AS t1 
INNER JOIN `system_header_link` AS t2 ON (t1.`SystemHeader_ID` = t2.`SystemHeader_ID`) 
INNER JOIN `system_data_link` AS t3 ON (t2.`SystemHeaderLink_ID` = t3.`SystemHeaderLink_ID`) 
INNER JOIN `system_data` AS t4 ON (t3.`SystemData_ID` = t4.`SystemData_ID`) 

執行,在MySQL工作臺,我得到一個表,兩個字段:SystemHeader_Name, System_Value

我想弄清楚如何從查詢包裝中獲取System_Value。如果我做到以下幾點:

for s in sHeader_Value: 
    print s.SystemHeader_Name, s.System_Value 

我提出與AttributeError,指出'System_Headers' object has no attribute 'System_Value'

請注意,如果我只嘗試做print s.SystemHeader_Name,它會完美地執行。

如何捕獲我的System_Value字段的值?

回答

10

我剛纔找出了問題所在。它返回的數據對象是一個System_Headers對象,它是該特定表的模型。因此,該模型沒有System_Value屬性。通過將naive()添加到我的peewee代碼中,它將該屬性傳遞到我的System_Headers模型上,從而允許我訪問System_Value字段。

下面是工作代碼:

sHeader_Value = (System_Headers 
    .select(System_Headers.SystemHeader_Name, System_Data.System_Value) 
    .join(System_Header_Link) 
    .join(System_Data_Link) 
    .join(System_Data) 
    .naive()) 
+0

是的,這個工作。但是當我序列化行時,它不會添加'System_Value'鍵 – Rishabh

+0

任何人在使用LEFT OUTER JOIN時都知道如何解決這個問題,但它仍然會給出相同的錯誤。 – bobthemac