2011-10-08 11 views
5

Ho una classe:Python/SQLAlchemy: carica la relazione quando la chiave esterna viene aggiornata?

class Chart(Base): 
    __tablename__ = 'chart' 
    id = C('chart_id', Integer, primary_key=True) 
    element_id = C(Integer, ForeignKey('element.element_id')) 
    element = relationship(Element) 
    name = C(String) 

    def __init__(self, name): 
     self.name = name 

L'uso è abbastanza comune,

chart = Chart('Some name') 
chart.element_id = element_id 

Ma chart.element è nessuno dopo aver impostato element_id. Esiste un modo per caricare automaticamente questa relazione per il nuovo oggetto prima di eseguire il flush/commit?

risposta

5

L'opzione migliore è

chart = Chart('Some name') 
chart.element = element 

Assegna oggetto diretto alla nave relazione. Se si assegna element_id, finché non si svuota verrà memorizzato. Internamente si scatta una query SELECT * FROM ELEMENT WHERE ELEMENT.id = element_id ma che i dati element_id non è conservare o sarà in memoria.

Quindi suggerisco oggetto di assegnazione diretta, se non si vuole per irrigare.

Spero che questo vi aiuterà.

+1

Grazie per la reponse. Sto usando in questo modo ora. La mia funzione riceve element_id e ottengo da solo l'elemento per impostarlo in un oggetto Chart (lo svuotamento è eseguito internamente). Sembra che sia l'unico modo. – Victor

Problemi correlati