首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

go-pg -读取upsert后返回的ID

go-pg是一个用于Go语言的PostgreSQL ORM库,它提供了方便的API来操作和管理PostgreSQL数据库。在使用go-pg进行upsert操作后,可以通过以下方式获取返回的ID:

  1. 首先,确保你已经导入了go-pg库:
代码语言:txt
复制
import "github.com/go-pg/pg/v10"
  1. 假设你已经定义了一个名为User的结构体,用于映射数据库中的用户表:
代码语言:txt
复制
type User struct {
    ID   int
    Name string
}
  1. 执行upsert操作,并获取返回的ID:
代码语言:txt
复制
user := &User{Name: "John Doe"}
_, err := db.Model(user).OnConflict("(name) DO UPDATE").Set("name = EXCLUDED.name").Returning("id").SelectOrInsert()
if err != nil {
    // 处理错误
}

// 获取返回的ID
id := user.ID

在上述代码中,我们使用Model函数指定了要操作的模型,即User结构体。然后,通过OnConflict方法指定了冲突解决策略,这里使用了(name) DO UPDATE,表示当存在冲突时更新name字段。接着,使用Set方法设置要更新的字段,这里只更新了name字段。最后,使用Returning方法指定要返回的字段,这里返回了id字段。最后,通过SelectOrInsert方法执行upsert操作,并将返回的ID赋值给user.ID

go-pg的优势在于它提供了简洁而强大的API,可以轻松地进行数据库操作。它支持事务、连接池、查询构建器等功能,使得开发人员能够高效地进行数据库操作。go-pg还提供了丰富的文档和示例,方便开发人员学习和使用。

对于使用go-pg进行upsert操作后返回ID的应用场景,可以是需要在插入或更新数据后获取生成的ID的情况。例如,在用户注册时,可以使用upsert操作插入或更新用户信息,并获取生成的用户ID,以便后续的操作。

腾讯云提供了一系列与数据库相关的产品和服务,例如云数据库 PostgreSQL、云原生数据库 TDSQL、分布式数据库 CynosDB 等,可以根据具体需求选择适合的产品。你可以通过访问腾讯云官网了解更多关于这些产品的详细信息和使用指南。

参考链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • mybatis插入数据返回自增主键ID详解

    1.场景介绍: ​ 开发过程中我们经常性会用到许多中间表,用于数据之间对应和关联.这个时候我们关联最多就是ID,我们在一张表中插入数据级联增加到关联表中.我们熟知mybatis在插入数据返回是插入成功条数...,那么这个时候我们想要得到相应这条新增数据ID,该怎么办呢?...2.插入数据返回自增主键ID方法(一) 在映射器中配置获取记录主键值 xml映射: 在xml中定义useGeneratedKeys为true,返回主键id值,keyProperty和keyColumn...因此,如果需要获取新添加记录主键值,需要在执行添加操作之后,直接读取Java对象主键属性。...System.out.println("id = " + student.getId()); // 执行添加操作之后通过Java对象获取主键属性值 添加批量记录时返回主键ID 如果希望执行批量添加并返回各记录主键字段值

    12.1K30

    Mybatis映射文件深入 - 新增数据返回主键ID - 动态SQL - SQL片段

    Mybatis映射文件深入 - 新增数据返回主键ID - 动态SQL - SQL片段 前言 在前面的篇章中,我们已经认识了如何使用 resultMap标签 映射查询结果集字段、多条件查询、模糊查询。...下面我们继续来深入认识一下 MyBatis 映射文件。 新增数据返回主键 ID 应用场景 向数据库保存一个user对象, 然后在控制台打印此新增user主键值(id) # 点外卖 1....: " + i); //查询插入返回主键ID System.out.println("插入数据主键ID: " + user.getId());...下面我们来模拟查询,如下: -- 查询数据同时,查询返回自增ID -- 注意:这两行SQL要按照顺序同时执行,否则单独查询 SELECT LAST_INSERT_ID(); 不会返回最新自增ID...: " + i); //查询插入返回主键ID System.out.println("插入数据主键ID: " + user.getId());

    1K30

    如何读取FPGA芯片序列号ID

    用过单片机朋友都知道,单片机芯片内部都有一串序列号,比如STM32,称之为Unique device ID,是一个96Bit只读数据。...和单片机一样,FPGA芯片内部同样也有ID,具有不可修改属性。以常用Xilinx和Altera为例,Altera称之为Chip ID,Xilinx FPGA称之为Device DNA。...一般来说,用户在逻辑上可以通过特定接口把这个Device DNA读取出来,经过一系列加密算法之后和预先在外部Flash存储一串加密字节串做比较,这个flash存储加密字节串也是由该DNA经过加密得到...方法2:调用原语读取 通过我们需要在程序读取出芯片DNA,可以通过调用DNA_PORT原语方式来读取芯片DNA。...XC6SLX9使用JTAG读取DNA XC6SLX9使用原语方式读取 而另一块XC6SLX16开发板,使用下载器和原语方式读取DNA是一致

    3.3K30

    SQL Server 返回最后插入记录自动编号ID

    IDENT_CURRENT 返回为任何会话和任何作用域中特定表最后生成标识值。IDENT_CURRENT 不受作用域和会话限制,而受限于指定表。...IDENT_CURRENT 返回为任何会话和作用域中特定表所生成值。 @@IDENTITY 返回为当前会话所有作用域中任何表最后生成标识值。...SCOPE_IDENTITY 返回为当前会话和当前作用域中任何表最后生成标识值 SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中任何表内所生成最后一个标识值。...IDENT_CURRENT(‘TableName’) –返回指定表中生成最后一个标示值 SELECT IDENT_INCR(‘TableName’)–返回指定表标示字段增量值 SELECT...IDENT_SEED(‘TableName’)–返回指定表标示字段种子值 返回最后插入记录自动编号 SELECT IDENT_CURRENT(‘TableName’) 返回下一个自动编号

    2.2K40

    Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中问题排查

    今天在使用数据库时候,遇到一个场景,即在插入数据完成需要返回此数据对应自增主键id,但是在使用Mybatis中generatedKey且确认各项配置均正确无误情况下,每次插入成功返回都是...1,而不是最新自增Id。...int表示是插入操作受影响行数,而不是指自增长id,那么返回自增id到底去哪里了呢?...通过下面的Debugg我们知道自增id返回到testGenKey原对象中去了。 举例示范配置 数据库示例表  generator配置文件 <?...null : sex.trim(); } } 测试及Debugg 编写测试方法测试插入 插入成功观察对应变量对应值 总结:调用Insert插入操作之后,所得到自增长Id被赋值到原对象当中

    1.6K10

    sql删除一条记录其他记录id自动迁移,使id连续

    在写一个应用时,有这么一个操作:客户端传过来点击位置,进行运算得到相应数据在数据库里id,然后显示对应信息。...但是在进行delete数据显示就混乱了,发现根本原因是原本连续数据id(例如:1、2、3、4),在sqlitedelete语句执行完(比如说删除id为2数据),变得不连续(1、3、4)。...删除后点击第三个数据,结果他显示成第二个,而第二个早就删除了,因此显示信息完全混乱。...(Object[]) ids); //更新id,使id大于要删除id往前移动一位。...db.execSQL("update tb_diary2 set _id=_id-1 where _id > ?",(Object[] )ids); 很多网友都说这样会影响性能,应该用触发器进行操作。

    1.2K20

    分库分表全局id生成解决方案

    分库分表每个表还都从1开始累加肯定有问题,需要全局唯一id生成器,下面详解各种方案优缺点。...1 数据库自增id 提供一个专门用于生成主键库,这样服务每次接收请求都 先往单点库某表里插入一条没啥业务含义数据 然后获取一个数据库自增id 取得id,再写入对应分库分表 优点 简单,是人都会...若硬是要改进,那就专门开个服务: 该服务每次就拿到当前id最大值 然后自己递增几个id,一次性返回一批id 然后再把当前最大id值修改成递增几个id之后一个值 但无论怎么说都只是基于单库。...,将会读取整个 B+ 树节点到内存,在插入这条记录后会将整个节点写回磁盘,这种操作在记录占用空间比较大情况下,性能下降明显 适用场景 若你是要随机生成文件名、编号之类,可以用UUID,但是作为主键是不能...然后5 bit是你传递进来一个机房id(但是最大只能是32以内) 5 bit是你传递进来机器id(但是最大只能是32以内) 剩下那个10 bit序列号,就是如果跟你上次生成id时间还在一个毫秒内

    98911

    pandas读取表格常用数据处理操作

    大家好,我是Sp4rkW 今天给大家讲讲pandas读取表格一些常用数据处理操作。...这篇文章其实来源于自己数据挖掘课程作业,通过完成老师布置作业,感觉对于使用python中pandas模块读取表格数据进行操作有了更深层认识,这里做一个整理总结。...本文总结了一些通过pandas读取表格并进行常用数据处理操作,更详细参数应该关注官方参数文档 1、读取10行数据 相关参数简介: header:指定作为列名行,默认0,即取第一行值为列名,数据为列名行以下数据...nrows:需要读取行数(从文件头开始算起) tabledata = pandas.read_excel("....更加详细使用说明可以参考昨日「凹凸数据」另一条推文,《 ix | pandas读取表格行列取值改值操作》。

    2.4K00
    领券