【问题标题】:Can you get both rows affected and rows matched from a mysql UPDATE query using pymysql?您可以使用 pymysql 从 mysql UPDATE 查询中获取受影响的行和匹配的行吗?
【发布时间】:2018-08-31 16:38:14
【问题描述】:

在我的应用程序中,当我向 mysql 提交 UPDATE 查询时,可能会出现三种结果。

(1) 找到并更新一个匹配行

(2) 找到一个匹配的行,但更新没有效果,因为它没有改变任何东西

(3) 没有找到匹配的行。

Pymysql 的 cursor.execute() 函数返回受影响的行数:情况 (1) 为 1,情况 (2) 和 (3) 为 0。

我可以在不先进行额外查询以查看该行是否存在以及更新是否会影响它的情况下区分情况(2)和(3)吗?换句话说,除了受影响的行数,我还能得到匹配的行数吗?

【问题讨论】:

  • 我认为 MySQL 服务器没有提供任何区分它们的方法。
  • 您可以在表格中添加一个额外的列吗?您可以将new_column = new_column + 1 放入更新中,这样它将始终修改匹配的行。
  • 或者如果你有一个时间戳列,你可以这样做timestamp = now()
  • Barmar -- 我喜欢时间戳的想法。谢谢!

标签: mysql pymysql


【解决方案1】:

github PyMySQL issues 347 commentby methane

有两种方法可以知道匹配的行数。

  1. 传递客户端标志

从 pymysql.constants 导入客户端

conn = pymysql.connect(..., client_flag=CLIENT.FOUND_ROWS)

在这种情况下,rowcount 是与 WHERE 子句匹配的行数。 (但是你 无法知道行已更改)

  1. 信息

执行查询后,您可以通过以下方式显示短信 打印(光标._result.message)。

与mysql命令行客户端显示相同。 https://dev.mysql.com/doc/refman/5.7/en/mysql-info.html

【讨论】:

    猜你喜欢
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2018-05-13
    • 2019-05-17
    • 2010-11-08
    • 2019-02-19
    • 1970-01-01
    相关资源
    最近更新 更多