update tutorial query python postgresql sqlalchemy psycopg2

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.