2013-10-14 2 views
7

peewee를 사용하여 별도의 테이블에서 두 개의 필드를 선택하려고합니다. 내 문제는 결과 개체를 반복하는 것입니다.Python peewee - 여러 테이블에서 선택하십시오.

는 파이썬에 다음 코드를 가지고 : SystemHeader_Name, System_Value : MySQL의 워크 벤치에 나는 두 개의 필드와 테이블을 얻을 실행

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

예,이 일을 : 아래

는 작업 코드입니다. 그러나 행을 serialize 할 때'System_Value' 키를 추가하지 않습니다. – Rishabh

+0

LEFT OUTER JOIN을 사용할 때이 오류를 해결하는 방법을 아는 사람이라면 여전히 같은 오류가 발생합니다. – bobthemac