SQLAlchemy Obtener clave principal con autoincremento antes de confirmar

Cuando he creado una tabla con una clave principal de incremento automático, ¿hay alguna forma de obtener lo que sería la clave principal (es decir, hacer algo como reservar la clave principal) sin cometer realmente?

Me gustaría colocar dos operaciones dentro de una transacción, sin embargo, una de las operaciones dependerá de la clave primaria asignada en la operación anterior.

No necesitas commit , solo necesitas flush . Aquí hay un código de ejemplo. Después de la llamada para vaciar puede acceder a la clave principal que fue asignada. Tenga en cuenta que esto es con SA 0.4.8.

 from sqlalchemy import * from sqlalchemy.databases.mysql import * import sqlalchemy.ext.declarative Base = sqlalchemy.ext.declarative.declarative_base() class User(Base): __tablename__ = 'user' user_id = Column('user_id', Integer, primary_key=True) name = Column('name', String) if __name__ == '__main__': import unittest from sqlalchemy.orm import * import datetime class Blah(unittest.TestCase): def setUp(self): self.engine = create_engine('sqlite:///:memory:', echo=True) self.sessionmaker = scoped_session(sessionmaker(bind=self.engine)) Base.metadata.bind = self.engine Base.metadata.create_all() self.now = datetime.datetime.now() def test_pkid(self): user = User(name="Joe") session = self.sessionmaker() session.save(user) session.flush() print 'user_id', user.user_id session.commit() session.close() unittest.main() 

Puedes usar múltiples transacciones y gestionarlas dentro del scope.