在 UPDATE 查询期间 WHERE 不存在时引发异常

Raise Exception when WHERE doesn't exist during UPDATE query

我正在为一个 API 项目使用 MySQLdb / Python,运行 遇到了一个问题:

def activate_acct(act_link):

    # connect
    db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS,  db=DB_NAME)

    # create a database cursor
    cursor = db.cursor()

    try:
        sql = """UPDATE users
        SET activated = %s
        WHERE activate_code = %s"""

        cursor.execute(sql, (1, act_link))
        db.commit()

        return "Activated"

    except Exception as e:

        return e

查询有效,因为当找到 activate_code 时,激活被更改,dB 被更新,我看到一条成功消息。问题是,如果 activate_code 不存在 and/or 无效,我仍然会收到成功消息。

如果在 WHERE 中找不到 activate_code,我如何让此查询引发异常?

没有任何改变的UPDATE语句仍然被认为是成功的。您告诉数据库在发现特定值的任何地方进行更改;该值无处可寻,因此无处进行更改。它完全按照你的要求做了。

如果要检查以确保已进行更改,可以使用 the .rowcount attribute of a cursor object:

This read-only attribute specifies the number of rows that the last .execute*() produced (for DQL statements like SELECT ) or affected (for DML statements like UPDATE or INSERT ).

执行更新语句后,当且仅当 WHERE 子句中的谓词匹配时,cursor.rowcount > 0 才为真。这意味着您的更新已成功。

与您的具体问题无关,我建议不要使用代码示例中所示的 try-except。最好只换行并只捕获您可以处理的错误。如果您打算让调用作用域处理错误,则在调用作用域中捕获它(或在执行任何必要操作后在函数中重新引发它 logging/housekeeping),而不是抑制它并返回异常对象。