gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:21:20 25 4
gpt4 key购买 nike

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

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

我试图调查 err 变量(按照文档建议的 Insert 语句的方式):

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

但即使 id 不存在,err 仍然为 null。

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

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

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


那么检查我的更新是否更新任何内容的规范方法是什么?

最佳答案

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

res, err := db.Exec(query, args...)
if err != nil {
return err
}
n := res.RowsAffected()
// do something with n

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

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

引用链接:

关于go - 如何查看Psql是否成功更新了Go中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37818970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com