首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sqlalchemy (vesrion 1.4 !) -获取最后插入的id

sqlalchemy (vesrion 1.4 !) -获取最后插入的id
EN

Stack Overflow用户
提问于 2021-04-23 23:57:07
回答 1查看 236关注 0票数 1

怎样才能得到最后插入的id?请注意sqlalchemy版本,所以this问题不是我的问题。

我试过了:

代码语言:javascript
运行
复制
async def foo(db_session: AsyncSession, login):
    r1 = await db_session.execute(statement=models_users.insert().values(login=login))
    r2 = await db_session.flush()
    # r3 = await db_session.fetchval(...)  # Error, no such method for async
    r4 = await db_session.commit()
    print(r2, r4, r1.fechone())  # None, None, None
    print(r1.lastrowid)  # 'AsyncAdapt_asyncpg_cursor' object has no attribute 'lastrowid'


SQLAlchemy        1.4.4
asyncpg           0.22.0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-24 15:54:08

SQLAlchemy对lastrowid的支持依赖于底层的DB-API实现,因此依赖此属性是不安全的。但是,SQLAlchemy在CursorResult对象上提供了一个应该是可靠的inserted_primary_key属性。

返回值是插入行的主键值的元组。

问题中的这个版本的代码:

代码语言:javascript
运行
复制
async def foo(db_session: AsyncSession, login):
    r1 = await db_session.execute(statement=models_users.insert().values(login=login))
    print(r1)
    print('Last pk', r1.inserted_primary_key)
    await db_session.flush()
    await db_session.commit()

将产生如下输出:

代码语言:javascript
运行
复制
<sqlalchemy.engine.cursor.CursorResult object at 0x7f0215966bb0>
Last pk (17,)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67233244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档