繁体   English   中英

在pymysql中执行sql语句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM