2 回答

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)

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 {
...
}
- 2 回答
- 0 关注
- 147 浏览
添加回答
举报