使用Python获取Postgresql SERIAL KEY最后插入记录的ID

44 投票
8 回答
50477 浏览
提问于 2025-04-17 08:46

我正在使用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()

撰写回答