如何查看Psql是否成功更新了Go中的记录
How can I check whether Psql successfully updated the record in Go
我使用 this driver 与 Go 中的 psql 进行通信。现在,当我发出更新查询时,我无法知道它是否实际更新了任何内容(如果不存在此类 ID,它可以更新 0 行)。
_, err := Db.Query("UPDATE tags SET name= WHERE id=1", name)
我试图调查 err 变量(按照文档建议的 Insert 语句的方式):
if err == sql.ErrNoRows {
...
}
但即使 id 不存在,err 仍然为 null。
我还尝试使用带有返回子句的 QueryRow:
id := 0
err := Db.QueryRow("UPDATE tags SET name= WHERE id=1 RETURNING id", name).Scan(&id)
但是当数据库中不存在 id=1 时,这个无法扫描 &id。
那么检查我的更新是否更新任何内容的规范方法是什么?
对于没有 return 结果的查询,请尝试使用 db.Exec()
而不是 db.Query()
。它不是 returning 一个 sql.Rows
对象(它没有办法检查有多少行受到影响),而是 return 一个 sql.Result
对象,它有一个方法RowsAffected() (int64, error)
。这 returns 受提供给 Exec()
调用的查询中的任何写入操作影响(插入、删除、更新)的行数。
请注意,如果您的查询不直接影响任何行,而只是通过子查询影响行,则受子查询影响的行不会被计为受该方法调用影响的行。
此外,正如方法注释所指出的,这不适用于 所有 数据库类型,但我知道它适用于 pq
,因为我们我们自己正在使用该驱动程序(并使用 RowsAffected()
方法)。
参考链接:
我使用 this driver 与 Go 中的 psql 进行通信。现在,当我发出更新查询时,我无法知道它是否实际更新了任何内容(如果不存在此类 ID,它可以更新 0 行)。
_, err := Db.Query("UPDATE tags SET name= WHERE id=1", name)
我试图调查 err 变量(按照文档建议的 Insert 语句的方式):
if err == sql.ErrNoRows {
...
}
但即使 id 不存在,err 仍然为 null。
我还尝试使用带有返回子句的 QueryRow:
id := 0
err := Db.QueryRow("UPDATE tags SET name= WHERE id=1 RETURNING id", name).Scan(&id)
但是当数据库中不存在 id=1 时,这个无法扫描 &id。
那么检查我的更新是否更新任何内容的规范方法是什么?
对于没有 return 结果的查询,请尝试使用 db.Exec()
而不是 db.Query()
。它不是 returning 一个 sql.Rows
对象(它没有办法检查有多少行受到影响),而是 return 一个 sql.Result
对象,它有一个方法RowsAffected() (int64, error)
。这 returns 受提供给 Exec()
调用的查询中的任何写入操作影响(插入、删除、更新)的行数。
请注意,如果您的查询不直接影响任何行,而只是通过子查询影响行,则受子查询影响的行不会被计为受该方法调用影响的行。
此外,正如方法注释所指出的,这不适用于 所有 数据库类型,但我知道它适用于 pq
,因为我们我们自己正在使用该驱动程序(并使用 RowsAffected()
方法)。
参考链接: