2015-01-30 9 views
7
class Parent(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 

class Child(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    parent_id = db.Column(db.Integer, db.ForeignKey('parent.id')) 

parent = Parent() 
db.session.add(parent) 

child = Child() 
child.parent_id = parent.id 
db.session.add(child) 

db.session.commit() 

voglio INSERT in entrambi i parent e child tavoli all'interno di una sessione considerando che il parent_id devono essere inclusi nella tabella child. Nel momento in cui creo l'oggetto child, parent.id è Nessuno.Get inserita la chiave prima di commettere sessione

Come posso ottenere quello?

risposta

14

Si potrebbe utilizzare flush() per irrigare le modifiche al database e quindi avere il campo chiave primaria aggiornamento:

parent = Parent() 
db.session.add(parent) 
db.session.flush() 

print parent.id # after flush(), parent object would be automatically 
       # assigned with a unique primary key to its id field 

child = Child() 
child.parent_id = parent.id 
db.session.add(child) 
+1

Perfetto. Grazie! – stefanobaldo

+0

@stefanobaldo Nessun problema :) –