Python SQLAlchemy 插入后获取返回 ID

rks*_*ksh 11 python mysql postgresql sqlalchemy

我想使用 SQLAlchemy 在 postgresql 中插入后获取最后插入记录的 ID。这是代码,

insert_record = {list of data}
result = connection.execute(tbl_example.insert().returning(tbl_example.c.id), insert_record)
print result.id
Run Code Online (Sandbox Code Playgroud)

插入效果很好,但我似乎无法获取最后插入的 ID,出现以下错误,

AttributeError:“ResultProxy”对象没有属性“id”

返回ID位于返回对象中的什么位置?

Sha*_*hP 10

它直接位于返回对象中。文档中有示例

stmt = table.update().\
          where(table.c.data == 'value').\
          values(status='X').\
          returning(table.c.server_flag,
                    table.c.updated_timestamp)

for server_flag, updated_timestamp in connection.execute(stmt):
    print(server_flag, updated_timestamp)
Run Code Online (Sandbox Code Playgroud)

此外,ResultProxy 支持通过位置(如示例)和通过名称访问。因此,您可以使用类似row_id = row['id']以下内容:

for row in connection.execute(stmt):
    row_id = row['id']
    row_id = row.id
    row_id = row[0]
    print(row_id)
Run Code Online (Sandbox Code Playgroud)

请注意,并非所有数据库后端都支持此功能。从文档中:

请注意,并非所有数据库/DBAPI 都支持 RETURNING。对于那些不支持的后端,编译和/或执行时会引发异常。

  • 类似 ```row_id = result['id']``` 的东西会给我一个像这样的错误 ```TypeError: 'ResultProxy' object has no attribute '__getitem__'``` (2认同)