我正在使用 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
uj5u.com熱心網友回復:
假設您只想要呼叫列中的自動遞增值id,這是pq 驅動程式的插入
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)
uj5u.com熱心網友回復:
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 {
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/373118.html
標籤:PostgreSQL的 走
上一篇:將字串傳遞給Go中的處理程式函式
