python - query - sqlalchemy tutorial
SqlAlchemy: obtener el ID del Ășltimo registro insertado (5)
Asegúrate de usar fetchrow/fetch
para recibir el objeto returning
insert_stmt = user.insert().values(name="homer", country_id="123").returning(user.c.id)
row_id = await conn.fetchrow(insert_stmt)
Estoy usando SQLAlchemy sin el ORM, es decir, usando estadísticas SQL hechas a mano para interactuar directamente con la base de datos de back-end. Estoy usando PG como base de datos de mi base de datos (psycopg2 como controlador DB) en este caso, no sé si eso afecta la respuesta.
Tengo declaraciones como esta (por brevedad, supongamos que conn es una conexión válida a la base de datos):
conn.execute("INSERT INTO user (name, country_id) VALUES (''Homer'', 123)")
Supongamos también que la tabla de usuario consta de las columnas (id [CLAVE PRIMARIA DE SERIE], nombre, ID de país)
¿Cómo puedo obtener el ID del nuevo usuario (idealmente, sin volver a golpear la base de datos?)
Es posible que pueda utilizar la cláusula RETURNING
de la INSERT
siguiente manera:
result = conn.execute("INSERT INTO user (name, country_id) VALUES (''Homer'', 123)
RETURNING *")
Si solo quieres el id
resultante:
rslt_id = conn.execute("INSERT INTO user (name, country_id) VALUES (''Homer'', 123)
RETURNING id")
La documentation actual de SQLAlchemy sugiere
result.inserted_primary_key
debería funcionar!
Usuario lastrowid
result = conn.execute("INSERT INTO user (name, country_id) VALUES (''Homer'', 123)")
result.lastrowid
result.inserted_primary_key
Trabajó para mi. Lo único que se debe tener en cuenta es que esto devuelve una lista que contiene ese last_insert_id.