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 關注
- 131 瀏覽
添加回答
舉報