为了账号安全,请及时绑定邮箱和手机立即绑定

如何在数据库插入后取回行值?

如何在数据库插入后取回行值?

Go
HUWWW 2022-10-17 16:08:30
我正在使用 Golang 将数据插入数据库。基本上我的查询如下所示var cols = "(col1, col2, col3)"var values = "($1, $2, $3)"var query = fmt.Sprintf("INSERT INTO %s %s VALUES %s", myTable, cols, values)res, err := db.Exec(query, thing.val1, thing.val2, thing.val3)唯一可用的内容res是 lastInsertId 和受影响的行数。但我需要的是受影响的行。原因是我将数据插入到具有 AUTOINCREMENT id 列的 psql 数据库中 - 所以我希望将数据连同它一起返回。例如 - 使用 Java hibernate 我可以做这个答案解释的事情。我不必重新查询数据库的 ID。编辑:我尝试使用 lastInsertId 方法并收到此错误此驱动程序不支持 LastInsertId
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

假设您只想要一个名为的列中的自动递增值,这是使用pq 驱动程序id的插入


var cols = "(col1, col2, col3)"

var values = "($1, $2, $3)"

var query = fmt.Sprintf(

    "INSERT INTO %s %s VALUES %s RETURNING id",

    myTable, cols, values,

)

var id int

if err := db.QueryRow(

    query,

    thing.val1, thing.val2, thing.val3,

).Scan(&id); err != nil {

    panic(err)

}

fmt.Println("ID: ", id)

对于多个插入:


var cols = "(col1, col2, col3)"

var values = "($1, $2, $3),($4, $5, $6)"

var query = fmt.Sprintf(

    "INSERT INTO %s %s VALUES %s RETURNING id",

    myTable, cols, values,

)

var ids []int

rows, err := db.Query(

    query,

    thing.val1, thing.val2, thing.val3,

    thing.val4, thing.val5, thing.val6,

)

if err != nil {

    panic(err)

}

for rows.Next() {

    var id int

    if err := rows.Scan(&id); err != nil {

        panic(err)

    }

    ids = append(ids, id)

}

fmt.Println("IDs: ", ids)


查看完整回答
反对 回复 2022-10-17
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

res.LastInsertId()Postgres 驱动程序不支持。但是,它在 MySQL 驱动程序中受支持。


db.Exec()不会返回最后插入的 id,但db.QueryRow()会返回。


为了更好地理解,您可以参考此链接。


在这里,我添加了一个可能对您有所帮助的示例。


var id int

err := db.QueryRow("INSERT INTO user (name) VALUES ('John') RETURNING id").Scan(&id)

if err != nil {

...

}


查看完整回答
反对 回复 2022-10-17
  • 2 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号