如何检查Psql是否成功更新了Go中的记录

时间:2016-06-14 17:55:08

标签: go pq

我使用this driver与Go的psql进行通信。现在,当我发出更新查询时,我无法知道它是否实际更新了任何内容(如果不存在此ID,则可以更新0行)。

_, err := Db.Query("UPDATE tags SET name=$1 WHERE id=1", name)

我尝试调查错误的变量(就像doc建议的Insert语句一样):

if err == sql.ErrNoRows {
    ...
}

但即使id不存在,错误仍然是空的。

我还尝试将QueryRow与return子句一起使用:

id := 0
err := Db.QueryRow("UPDATE tags SET name=$1 WHERE id=1 RETURNING id", name).Scan(&id)

但是当数据库中没有id = 1时,这个无法扫描& id。

那么检查我的更新是否更新了什么的规范方法是什么?

1 个答案:

答案 0 :(得分:7)

对于未返回结果的查询,请尝试使用db.Exec()代替db.Query()。它不返回sql.Rows对象(无法检查受影响的行数),而是返回一个sql.Result对象,该对象具有方法RowsAffected() (int64, error)。这将返回馈送到Exec()调用的查询中的任何写操作影响(插入,删除,更新)的行数。

请注意,如果您的查询不直接影响任何行,但仅通过子查询影响,则受子查询影响的行将不会计为受该方法调用影响的行。

此外,正如方法注释所指出的,这不适用于所有数据库类型,但我知道它可以与pq一起使用,因为我们正在使用该驱动程序我们自己(并使用RowsAffected()方法)。

参考链接: