2013-10-14 15 views
7

Sto provando a selezionare due campi da tabelle separate utilizzando peewee. Credo che il mio problema riguardi l'iterazione dell'oggetto risultante.Python peewee: selezionare da più tabelle

Ho il seguente codice 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)) 

Questo codice genera il seguente 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`) 

esecuzione che in MySQL Workbench ho un tavolo con due campi: SystemHeader_Name, System_Value.

Sto cercando di capire come ottenere il System_Value dal wrapper di query. Se faccio la seguente:

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

mi sono presentato con una AttributeError, affermando che la 'System_Headers' object has no attribute 'System_Value'.

Si noti che se provo solo a fare print s.SystemHeader_Name, si esegue perfettamente.

Come acquisire i valori per il campo System_Value?

risposta

10

Ho appena capito qual era il problema. L'oggetto dati restituito è un oggetto System_Headers, che è il modello per quella tabella specifica. In quanto tale, quel modello non ha un attributo System_Value. Aggiungendo naive() al mio codice peewee ha passato l'attributo sul mio modello System_Headers, permettendomi così di accedere al campo System_Value.

Di seguito si riporta il codice di lavoro:

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

Sì, questo ha funzionato. Ma quando serializzo la riga non aggiunge il tasto 'System_Value' – Rishabh

+0

Chiunque sappia come aggirare questo problema quando usa LEFT OUTER JOIN continua a dare lo stesso errore. – bobthemac