使用错误mysql连接器的参数打印cursor.statement

时间:2017-09-07 11:10:46

标签: python mysql mysql-connector

在Python中,我使用mysql连接器进行查询,使用单独的参数,如:

 cursor.execute("update tableA set a=%s,b=%s,c=%s", [1,2,3])

我知道当查询成功时我可以使用:

print(cursor.statement)

但如果出现错误,如何获取包含参数的实际查询?

所以我想得到:

"update tableA set a=1,b=2,c=3"

1 个答案:

答案 0 :(得分:1)

您知道查询成功(至少在技术上 - 结果是否是您预期的另一个问题),因为它没有引发任何异常。所以明显的答案是:抓住异常并从那里打印你的参数:

myquery = "..."
try:
    cursor.execute("myquery", params)
except MySQLdb.MySQLError as e:
    # using the logging package would be better
    print("query '{}' with params {} failed with {}".format(myquery, params, e))
    # let the error propagate if you don't 
    # know how to / cannot handle it at this point
    raise 

编辑:如果你想获得执行的确切查询,那么就没有officially specified by the db api specs。对于MySQLdb,有一个未记录的公共Connection.literal(args)方法,您可以将其与查询和参数一起使用,即:

    sql = myquery % yourdbconnection.literal(params)
    print("query '{}' failed with {}".format(sql, e))

FWIW,这正是执行查询的构建方式(参见MySQLdb.cursor.execute()的来源)。现在虽然公开(没有前缀_)它仍然没有文档,所以没有保证它在下一个版本中仍然会以这种方式工作 - 当然它是特定于实现的,所以它可能不适用于任何其他db-api连接器。