2013-10-14 19 views
7

Peewee'yi kullanarak ayrı tablolardan iki alan seçmeye çalışıyorum. Sorunumun sonuçta ortaya çıkan nesnenin üzerinde durduğuna inanıyorum.Python peewee - birden çok tablo arasından seçim yapın

Python içinde aşağıdaki kodu vardır: SystemHeader_Name, System_Value: MySQL Workbench ben iki alan içeren bir tablo almak yürütülmesi

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

Bu kod aşağıdaki SQL oluşturur.

System_Value sorgu sarıcısından nasıl alacağımı anlamaya çalışıyorum.

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

Ben 'System_Headers' object has no attribute 'System_Value' olduğunu belirten bir AttributeError ile sunulan am: Ben aşağıdakileri yaparsanız.

Yalnızca print s.SystemHeader_Name yapmayı denediğimde, sorunsuz çalıştığını unutmayın.

System_Value alanım için değerleri nasıl kaydederim?

cevap

10

Sadece sorunun ne olduğunu anladım. Geri döndüğü veri nesnesi, belirli bir tablo için model olan System_Headers nesnesidir. Bu modelde, System_Value özniteliği yoktur. Peewee koduma naive() ekleyerek, bu özelliği System_Headers modelime ilettim, böylece System_Value alanına erişmeme izin verin.

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

Evet, bu çalıştı: Aşağıda

çalışma kodudur. Ancak satırı serileştirdiğimde "System_Value" anahtarını – Rishabh

+0

eklemez. Bu sorunun nasıl çözüleceğini bilen bir kişi SOL OUTER JOIN kullanırken aynı hatayı verir. – bobthemac

İlgili konular