【问题标题】:Flask mySQLDB execute success or failureFlask mySQLDB 执行成功或失败
【发布时间】:2017-05-07 20:51:01
【问题描述】:

我是 Python-Flask 的新手,正在尝试使用 MySQLDB 连接到数据库。但是,我无法确定如何检查游标执行的查询是成功还是失败。在下面的代码中,有人可以告诉我如何处理 if 语句中的条件吗? c 是一个指向数据库的游标,它连接成功,所以我从下面的代码中排除了它。

qry = "SELECT count(*) FROM users where username = (%s)" % (username)
try:
    x = c.execute(qry) #Is this correct? Doe execute command return a value?
    if <<*Check if the query executed successfully*>>:
        return 'Success'
    else:
        return 'Failure'
except Exception as e:
    return 'Failure'

【问题讨论】:

  • 这似乎是一件奇怪的事情。您要求计数,所以正常行为肯定是返回值吗?
  • 谢谢丹尼尔。这只是一个示例查询。想象一下我将表名拼错为“users”而不是“user”......或者想象一个插入查询,我尝试插入一个空白用户名,并且数据库将用户名作为主键。所以,它会失败,如果查询执行成功与否,我试图在返回中捕获。

标签: python flask mysql-python execute


【解决方案1】:

c.execute(qry) 在您的情况下不会返回任何内容。所以,你不能将它用于if 语句。

但是,您可以使用fetchall()fetchone() 来检查您的查询是否有一些结果。它看起来像这样:

qry = "SELECT count(*) FROM users where username = (%s)" % (username)
try:
    c.execute(qry) #Is this correct? Doe execute command return a value?
    user = c.fetchone()
    if user:
        return 'Success'
    else:
        return 'Failure'
except Exception as e:
    return 'Failure'

【讨论】:

  • 首先,如果要使用insert,则不会有fetchone。其次,insert 上的任何错误都将被except 部分捕获。
【解决方案2】:

您已经有方法检测您发布的代码中的故障。如果查询出现问题,Python 将引发异常,您可以捕获该异常。尽管值得注意的是,您永远不应该捕获一个裸异常,当然也不应该隐藏该异常是什么;捕获相关的 MySQLdb 异常,例如MySQLdb.Error

【讨论】:

    猜你喜欢
    • 2019-05-05
    • 2019-06-15
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2020-10-28
    • 1970-01-01
    相关资源
    最近更新 更多