Acabo de encontrar el mismo problema, y después de las pruebas he encontrado que NINGUNA de estas respuestas es suficiente.
En la actualidad, o como de sqlalchemy .6+, hay una solución muy simple (no sé si esto existe en la versión anterior, aunque me imagino que lo hace):
session.refresh()
Por lo tanto, el código sería algo como esto:
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.
Eso es cómo hacerlo.
¿Se puede inicializar el motor de SA con 'echo = True', y ver qué SQL se ejecuta en tiempo de descarga? Lo que usted describe * debería * funcionar y darle la identificación, pero puede haber algún otro problema que resulte en que fida sea Ninguno. –