在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"
答案 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连接器。