3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個贊
我知道這已經(jīng)有一百萬年的歷史了,但為了完成,這里采用 Gorm 的方法 -子句。
????result?:=?r.Gdb.Model(&User{}).Clauses(clause.Returning{}).Where("id?=??",?"000-000-000").Updates(content)

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個贊
它并不漂亮,但由于您使用的是 postgres,您可以執(zhí)行以下操作:
realDB := db.DB()
rows, err := realDB.Query("UPDATE some_table SET name = 'a' WHERE name = 'b' RETUNING id, name")
//you could probably do db.Raw but I'm not sure
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name string
err := rows.Scan(&id, &name)
if err != nil {
log.Fatal(err)
}
log.Println(id, name)
}

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個贊
如果您知道要更新的行數(shù)相對較小(<1000),那么這是一個不錯的解決方案
var ids []int
var results []YourModel
// Get the list of rows that will be affected
db.Where("YOUR CONDITION HERE").Table("your_table").Select("id").Find(&ids)
query := db.Where("id IN (?)", ids)
// Do the update
query.Model(&YourModel{}).Updates(YourModel{field: "value"})
// Get the updated rows
query.Find(&results)
這對于競爭條件是安全的,因?yàn)樗褂?ID 列表來執(zhí)行更新而不是重復(fù)子句WHERE。正如您可以想象的那樣,當(dāng)您開始談?wù)摂?shù)千行時,這變得不太實(shí)用。
- 3 回答
- 0 關(guān)注
- 328 瀏覽
添加回答
舉報