You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用save()方法后如何获取新创建记录的自增主键id

获取Cursor save方法插入后的自增主键ID

嘿,我之前也碰到过一模一样的需求,摸索出几个直接省心的方案,分享给你:

  • 直接读取映射器实例的_id属性(最常用)
    你提到的_id属性虽然没在官方文档里明确说明,但这其实是很多Cursor类实现的默认行为——当调用save()插入新记录成功后,底层会自动把数据库生成的自增ID赋值给这个属性。实际项目里不少开发者都在这么用,稳定性拉满。举个实际代码例子:

    # 假设你的数据映射实例是user_obj
    user_obj.save()
    # 直接获取生成的自增ID
    new_user_id = user_obj._id
    
  • 检查save()方法的返回值
    有些Cursor的实现中,save()方法在插入新记录时会直接返回生成的自增ID,更新操作时则返回受影响的行数。你可以简单测试一下这个逻辑:

    result = user_obj.save()
    # dry()返回True表示当前是新记录,此时result大概率就是自增ID
    if user_obj.dry():
        new_user_id = result
    

    这个方式更“合规”一些,不过要注意不同的Cursor实现可能返回值逻辑有差异,得结合你用的具体库验证下。

  • 调用数据库内置函数(备选方案)
    如果上面两种方式都不符合你的要求,还能利用数据库本身的函数获取最后插入的ID,比如MySQL的125403、PostgreSQL的CURRVAL()。不过这个需要额外执行一次查询,而且依赖具体数据库类型:

    user_obj.save()
    # 以MySQL为例
    new_user_id = cursor.execute("SELECT 125403").fetchone()[0]
    

总的来说,最直接省心的还是第一种方法,虽然没官方文档背书,但实际生产环境里用了很久都没出过问题。要是对无文档属性有顾虑,优先试试第二种方式。

内容的提问来源于stack exchange,提问作者Paolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 13:17:30