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

2024-04-25 21:37:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我将MySQLdb/Python用于一个API项目,遇到了一个问题:

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\u代码时,activated被更改,dB被更新,我看到一条成功消息。问题是,如果activate\ u代码不存在和/或无效,我仍然会收到成功消息。你知道吗

如果在WHERE中找不到activate\ u代码,如何让此查询引发异常?


Tags: 代码api消息dbsqlreturnconnectlink
1条回答
网友
1楼 · 发布于 2024-04-25 21:37:40

不改变任何内容的UPDATE语句仍然被认为是成功的。您告诉数据库在找到某个值的任何地方进行更改;该值在任何地方都找不到,因此更改在任何地方都没有进行。它完全按照你的要求做了。你知道吗

如果要检查以确保进行了更改,可以使用the ^{} 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 ).

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

与您的具体问题无关,我建议不要使用try,除非您的代码示例中显示了这一点。最好只包装一行,只捕获可以处理的错误。如果希望调用作用域处理错误,则在调用作用域中捕获错误(或在执行任何必要的日志记录/内务处理后在函数中重新引发错误),而不是抑制错误并返回异常对象。你知道吗

相关问题 更多 >