【问题标题】:MySQLdb Python Update Matched row versus Changed rowsMySQLdb Python 更新匹配的行与更改的行
【发布时间】:2014-07-16 10:53:38
【问题描述】:

从 mysql 客户端命令行,我在 UPDATE 后得到有用的信息,告诉我 WHERE 子句匹配了多少行,以及实际更改了多少行。在我将值设置为现有值的情况下,我得到 1 匹配和 0 更改。

这是我想在我的 Python MySQLdb 脚本中捕获的非常有用的信息。我已经尝试过 db.affected_rows() 和 cursor.rowcount 但它们总是为 1(似乎是“匹配”值)。我尝试过提交和不提交。

如何在 Python 中同时找到 Match 值和 Changed 值?

mysql> UPDATE userlogtable SET somefield="samedata" WHERE idxfield=1;
Query OK, 0 rows affected (0.02 sec)
Rows matched: 1  Changed: 0  Warnings: 0

mysql> UPDATE userlogtable SET somefield="newdata" WHERE idxfield=1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

相关但不重复的问题: Python MYSQLdb documentation missing details?

【问题讨论】:

    标签: python mysql mysql-python


    【解决方案1】:

    默认情况下,db.affected_rows()cursor.rowcount 应该为您提供更改的行数。 FOUND_ROWS 选项使 cursor.rowcount 返回匹配的行数:

    db_connection = MySQLdb.connect(
            host = settings['dbHost'],
            user = settings['dbUser'],
            passwd = settings['dbPass'],
            db = settings['dbName'],
            client_flag = MySQLdb.constants.CLIENT.FOUND_ROWS
            )
    

    关于获取匹配行数和更改行数的两种方法,请查看以下问题:

    How to get matched Rows from MySQLdb.cursors.Cursor python2.6

    【讨论】:

    • 我非常感谢您发布此内容。我尝试使用 options 关键字并传入 FOUND_ROWS 标志,但显然这不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多