我使用這個驅動程序從 Go 與 psql 進行通信?,F在,當我發出更新查詢時,我不可能知道它是否真的更新了任何東西(如果不存在這樣的 id,它可以更新 0 行)。_, err := Db.Query("UPDATE tags SET name=$1 WHERE id=1", name)我試圖調查 err 變量(以文檔建議插入語句的方式):if err == sql.ErrNoRows { ...}但即使 id 不存在,err 仍然為空。我還嘗試將 QueryRow 與返回子句一起使用:id := 0err := Db.QueryRow("UPDATE tags SET name=$1 WHERE id=1 RETURNING id", name).Scan(&id)但是當數據庫中不存在 id=1 時,這個無法掃描 &id。那么檢查我的更新是否更新了什么的規范方法是什么?
1 回答

www說
TA貢獻1775條經驗 獲得超8個贊
對于不返回結果的查詢,請嘗試使用db.Exec()
而不是。db.Query()
它不是返回一個sql.Rows
對象(它沒有辦法檢查有多少行受到影響),而是返回一個sql.Result
對象,它有一個方法RowsAffected() (int64, error)
。這將返回被饋送到Exec()
調用的查詢中的任何寫操作影響(插入、刪除、更新)的行數。
請注意,如果您的查詢不直接影響任何行,而僅通過子查詢影響,則受子查詢影響的行將不計為該方法調用受影響的行。
此外,正如方法注釋所指出的,這不適用于所有數據庫類型,但我知道它適用于pq
,因為我們自己使用該驅動程序(并使用該RowsAffected()
方法)。
參考鏈接:
- 1 回答
- 0 關注
- 196 瀏覽
添加回答
舉報
0/150
提交
取消