Acabo de encontrarme con un problema bastante complicado y, después de las pruebas, he encontrado que NINGUNA de las respuestas disponibles es suficiente.Obtener el último valor insertado de MySQL con SQLAlchemy
He visto varias sugerencias pero ninguna parece ser capaz de devolver el último valor insertado para un campo auto_increment en MySQL.
He visto ejemplos que mencionan el uso de session.flush() para agregar el registro y luego recuperar el id. Sin embargo, que siempre parece volver a 0.
También he visto ejemplos que mencionan el uso de session.refresh(), pero esto plantea el siguiente error: InvalidRequestError: No se pudo actualizar instancia ''
Lo que estoy intentar hacerlo parece increíblemente simple, pero parece que no puedo descifrar el secreto.
Estoy usando el enfoque declarativo.
Por lo tanto, mi código es como la siguiente:
class Foo(Base):
__tablename__ = 'tblfoo'
__table_args__ = {'mysql_engine':'InnoDB'}
ModelID = Column(INTEGER(unsigned=True), default=0, primary_key=True, autoincrement=True)
ModelName = Column(Unicode(255), nullable=True, index=True)
ModelMemo = Column(Unicode(255), nullable=True)
f = Foo(ModelName='Bar', ModelMemo='Foo')
session.add(f)
session.flush()
En este punto, el objeto f ha sido empujado a la base de datos, y se le ha asignado automáticamente un único identificador de clave primaria. Sin embargo, parece que no puedo encontrar una manera de obtener el valor para usar en algunas operaciones adicionales. Me gustaría hacer lo siguiente:
my_new_id = f.ModelID
Sé que puede simplemente realizar otra consulta para buscar el ModeloId en base a otros parámetros, pero yo preferiría no, si es posible.
Agradecería cualquier idea de una solución a este problema.
Gracias por la ayuda con antelación.
Buena captura, no notó el valor predeterminado = 0. –
El registro del servidor siempre funcionará para encontrar el problema :) – Nilesh
Ugh ... sí, buena captura. Mi cabeza estaba en el mundo de SQL donde se requiere un valor predeterminado para un campo de clave principal cuando se crea la tabla. Gracias por el hallazgo – PlaidFan