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

我正在使用 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


HUWWW
浏览 148回答 2
2回答

SMILET

假设您只想要一个名为的列中的自动递增值,这是使用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 intif 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 []introws, 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)

犯罪嫌疑人X

res.LastInsertId()Postgres 驱动程序不支持。但是,它在 MySQL 驱动程序中受支持。db.Exec()不会返回最后插入的 id,但db.QueryRow()会返回。为了更好地理解,您可以参考此链接。在这里,我添加了一个可能对您有所帮助的示例。var id interr := db.QueryRow("INSERT INTO user (name) VALUES ('John') RETURNING id").Scan(&id)if err != nil {...}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go