2013-10-14 18 views
7

私はpeeweeを使用して別のテーブルから2つのフィールドを選択しようとしています。私は私の問題は、結果のオブジェクトを反復していると考えています。Python peewee - 複数のテーブルから選択

は、私はPythonで、次のコードを持っている:SystemHeader_Name, System_Value:MySQLのワークベンチで私は2つのフィールドを持つテーブルを取得することを実行

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`) 

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を生成します。

私はクエリラッパーからSystem_Valueを取得する方法を理解しようとしています。

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

私は'System_Headers' object has no attribute 'System_Value'ことを示す、AttributeErrorを提示しています:私は、次の操作を行います。

私がprint s.SystemHeader_Nameを実行しようとすると、完璧に実行されます。

System_Valueフィールドの値を取得するにはどうすればよいですか?

答えて

10

私は問題の内容を把握しました。返すデータオブジェクトは、System_Headersオブジェクトです。これは、その特定のテーブルのモデルです。したがって、そのモデルにはSystem_Value属性がありません。私のpeeweeコードにnaive()を追加することで、それは私の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

関連する問題