[英]Get executed sql statement in pymysql
我正在执行一个无效的查询,但我希望能够准确地看到pymysql
正在执行什么查询来调试它。 有没有办法做类似的事情:
try:
self.cursor.execute(SQL, tuple(PARAMS))
except:
print (self.cursor.last_executed_statement) # ??
根据文档,您应该能够执行以下操作:
print (self.cursor.statement)
此只读属性将最后执行的语句作为字符串返回。
statement
属性可用于调试和显示发送到 MySQL 服务器的内容。如果执行了多语句字符串,则该字符串可以包含多个语句。 这发生在具有 multi=True 的 execute() 上。 在这种情况下,
statement
属性包含整个语句字符串,execute()
调用返回一个迭代器,可用于处理各个语句的结果。 此迭代器的statement
属性显示各个语句的语句字符串。
pep 0249没有定义这样做的方法。 但是 pymysql 有一个mogrify
方法会显示生成的 SQL。
values={ 'qty': 10, 'descr': "chocolate cake" }
sql='''INSERT INTO mywishes
( quantity, description )
VALUES ( %(qty)s, %(descr)s )
'''
try:
cursor.execute( sql, values )
except pymysql.ProgrammingError:
print("Hum, there is an error in the sql...")
print(cursor.mogrify(sql, values))
另请注意,如果您没有做到这一点,则意味着 pymysql 无法将 map 您的 SQL 文本和参数传递给实际的 SQL 语句。 例如,如果您的参数列表太长或太短,就会发生这种情况。 以下将引发 TypeError:
sql="insert into mywishes ( quantity, description ) values ( %s, %s )"
cursor.mogrify(sql, [1])
cursor.mogrify(sql, [1,2,3])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.