使用Python获取Postgresql SERIAL KEY最后插入记录的ID
我正在使用SQLAlchemy,但没有使用它的ORM功能,也就是我直接写SQL语句来和数据库打交道。在这个例子中,我的后端数据库是PG(使用psycopg2作为数据库驱动),我不知道这是否会影响答案。
我有这样的语句,为了简洁起见,假设conn是一个有效的数据库连接:
conn.execute("INSERT INTO user (name, country_id) VALUES ('Homer', 123)")
还假设用户表包含以下列:(id [SERIAL PRIMARY KEY], name, country_id)
我该如何在不再次查询数据库的情况下,获取新用户的id呢?
8 个回答
18
现在的 SQLAlchemy 文档 提到
result.inserted_primary_key
应该可以正常使用!
33
用户提到的 lastrowid
是一个在数据库操作中常用的概念。
result = conn.execute("INSERT INTO user (name, country_id) VALUES ('Homer', 123)")
result.lastrowid
36
你可以使用 INSERT
语句的 RETURNING
子句,像这样:
result = conn.execute("INSERT INTO user (name, country_id) VALUES ('Homer', 123)
RETURNING *")
如果你只想要生成的 id
:
result = conn.execute("INSERT INTO user (name, country_id) VALUES ('Homer', 123)
RETURNING id")
[new_id] = result.fetchone()