使用Python获取Postgresql SERIAL KEY插入的最后一条记录的ID
我使用的是没有 ORM 的 SQLAlchemy,即使用手工编写的 SQL 语句直接与后端数据库交互。在这种情况下,我使用 PG 作为我的后端数据库(psycopg2 作为数据库驱动程序) - 我不知道这是否会影响答案。
到数据库的有效连接:
conn.execute("INSERT INTO user (name, country_id) VALUES ('Homer', 123)")
还假设用户表由列 (id [SERIAL PRIMARY KEY], name, country_id)
组成
我有这样的语句,为了简洁起见,假设 conn是 理想情况下,我可以获取新用户的 ID,而无需再次访问数据库吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
您也许可以使用 RETURNING 子句>
INSERT
语句如下所示:如果您只想要结果
id
:You might be able to use the
RETURNING
clause of theINSERT
statement like this:If you only want the resulting
id
:用户
lastrowid
User
lastrowid
当前的 SQLAlchemy 文档 建议
result.inserted_primary_key
应该可以工作!Current SQLAlchemy documentation suggests
result.inserted_primary_key
should work!Python + SQLAlchemy
提交后,您将在对象中更新主键列 ID(自动增量)。
Python + SQLAlchemy
after commit, you get the primary_key column id (autoincremeted) updated in your object.
这个问题在 stackoverflow 上已经被问过很多次了,但我看到的答案都不是全面的。谷歌搜索“sqlalchemy insert get id of new row”会出现很多这样的内容。
SQLAlchemy 分为三个级别。
顶部:ORM。
中:带有表类等的数据库抽象(DBA)。
底部:使用文本函数的 SQL。
对于 OO 程序员来说,ORM 级别看起来很自然,但对于数据库程序员来说,它看起来很难看,而且 ORM 会妨碍。 DBA 层是一个不错的折衷方案。 SQL 层对于数据库程序员来说看起来很自然,而对于纯面向对象的程序员来说则显得陌生。
每个级别都有自己的语法,相似但又不同,足以令人沮丧。除此之外,网上几乎有太多文档,很难找到答案。
我将描述如何在 SQL 层获取我使用的 RDBMS 的插入 id。
this question has been asked many times on stackoverflow and no answer I have seen is comprehensive. Googling 'sqlalchemy insert get id of new row' brings up a lot of them.
There are three levels to SQLAlchemy.
Top: the ORM.
Middle: Database abstraction (DBA) with Table classes etc.
Bottom: SQL using the text function.
To an OO programmer the ORM level looks natural, but to a database programmer it looks ugly and the ORM gets in the way. The DBA layer is an OK compromise. The SQL layer looks natural to database programmers and would look alien to an OO-only programmer.
Each level has it own syntax, similar but different enough to be frustrating. On top of this there is almost too much documentation online, very hard to find the answer.
I will describe how to get the inserted id AT THE SQL LAYER for the RDBMS I use.
为我工作。唯一需要注意的是,这会返回一个包含该last_insert_id 的列表。
Worked for me. The only thing to note is that this returns a list that contains that last_insert_id.
确保使用
fetchrow/fetch
接收返回
对象Make sure you use
fetchrow/fetch
to receive thereturning
object对于 Postgress 从 python 代码插入很简单,可以在末尾语法的插入语句中使用“RETURNING”关键字和“col_id”(您想要获取最后插入的行 ID 的列的名称)
-
前任 -
For Postgress inserts from python code is simple to use "RETURNING" keyword with the "col_id" (name of the column which you want to get the last inserted row id) in insert statement at end
syntax -
ex -