在SQLAlchemy中获取已创建记录的id

时间:2010-02-03 00:29:52

标签: python insert sqlalchemy

如何在SQLAlchemy中获取已创建记录的ID?

我在做:

engine.execute("insert into users values  (1,'john')")

2 个答案:

答案 0 :(得分:14)

当您执行纯文本语句时,您将使用您正在使用的DBAPI,无论新PK值是否可用以及通过何种方式。使用SQlite和MySQL DBAPI,你可以将它作为result.lastrowid,它只为你提供光标的.lastrowid值。对于PG,Oracle等,没有“.lastrowid” - 正如其他人所说,你可以使用“RETURNING”来处理那些通过result.fetchone()获得结果的人(虽然使用了带有oracle的RETURNING,再次没有利用SQLAlchemy表达式构造,需要几个笨拙的步骤),或者如果RETURNING不可用,你可以使用直接序列访问(pg中的NEXTVAL),或“post fetch”操作(PG中的CURRVAL,@@ identity或scope_identity() MSSQL)。

听起来很复杂吧?这就是为什么你最好使用table.insert()。 SQLAlchemy提供新生成的PK的主要系统旨在使用这些结构。就在那里,result.last_inserted_ids()方法在所有情况下都为您提供新生成的(可能是复合的)PK,无论后端如何。上面的.lastrowid,sequence execution,RETURNING等方法都是为你处理的(0.6在可用时使用RETURNING)。

答案 1 :(得分:3)

您可以添加一个额外的条款:RETURNING

INSERT INTO users (name, address) VALUES ('richo', 'beaconsfield') RETURNING id

然后只需检索一行,就像insert是SELECT语句一样。