Je viens de rencontrer le même problème et après des tests, j’ai trouvé que AUCUNE de ces réponses n’était suffisante.
Actuellement, ou à partir de sqlalchemy .6+, il existe une solution très simple (je ne sais pas si cela existe dans la version précédente, bien que je l’imagine):
session.refresh ()
Donc, votre code ressemblerait à quelque chose comme ça:
f = Foo(bar=x)
session.add(f)
session.flush()
# At this point, the object f has been pushed to the DB,
# and has been automatically assigned a unique primary key id
f.id
# is None
session.refresh(f)
# refresh updates given object in the session with its state in the DB
# (and can also only refresh certain attributes - search for documentation)
f.id
# is the automatically assigned primary key ID given in the database.
Voilà comment le faire.