首页 > 解决方案 > 返回在 UPDATE 序列上更改的行

问题描述

我正在尝试返回在我的 UPDATE 序列中使用的行,以检查它是否实际更新了任何内容或尝试更新不存在的行,但我无法获取返回的实际行

在询问朋友和查看其他文章后,我尝试使用他们提供的方法,例如使用 sqlite3 的rowcount方法,以及执行函数中的 RETURNING 语句,但都分别抛出 AttributeError 和 SQLError。

def set_reason(guild: str, warn_id: int, reason):
    warns.execute("UPDATE warns SET reason=:reason WHERE id=:id AND server=:guild", {'reason': reason, 'id': warn_id, 'guild': guild})
    return warns.fetchone()

尝试使用 RETURNING 语句:

warns.execute("UPDATE warns SET reason=:reason WHERE id=:id AND server=:guild RETURNING warns.*", {'reason': reason, 'id': warn_id, 'guild': guild})

我明白了apsw.SQLError: SQLError: near "RETURNING": syntax error

并尝试使用该rowcount方法:

warns.execute("UPDATE warns SET reason=:reason WHERE id=:id AND server=:guild", {'reason': reason, 'id': warn_id, 'guild': guild}).rowcount()

我得到'AttributeError:'apsw.Cursor'没有属性'rowcount'`

标签: pythonsqliteapsw

解决方案


根据此 APSW docs page,该changes()方法在连接对象上,而不是游标对象上。

请参阅此答案以获取直接 SQL 查询以获取相同的信息。按照链接了解有关该功能的更多详细信息。如果不清楚,您只需SELECT changes()像任何其他单结果查询一样执行和检索结果。


推荐阅读