如何显示由MySQLDB游标构造的SQL字符串?
我想自己确认一下这个MySQL字符串是怎么被游标处理的:
cursor.execute("SELECT * from elements where id = %s", (element_id))
有没有办法获取到计算出来的SQL字符串并打印出来,最好是在执行之前?(虽然这个不是绝对必要的——我这样做只是因为我在学习Python,想确保我的SQL字符串是经过清理的)
2 个回答
1
MySQL-Python其实没做什么特别的事情,它只是把每个参数进行了编码,这样可以防止SQL注入攻击。然后,它使用标准的Python %
操作符,把 %s
这些占位符替换成编码后的参数。
如果你想看看具体的结果,可以运行和 cursor.execute()
一样的代码:
from MySQLdb.converters import get_codec
def prepare_sql(cursor, query, args=None):
if args is not None:
query = query % tuple(( get_codec(a, cursor.encoders)(db, a) for a in args ))
return query
你可以在 MySQLdb/cursors.py
的第168行开始查看 execute()
的定义。
6
是的。正如Ferdinand所提到的,有一个叫做 MySQLdb/cursors.py
的文件,其中包含一个 execute()
的函数,这个函数会调用 _query()
。
这个过程会把执行过的查询放到 self._executed
里。
所以你可以通过 cursor._executed
来获取这个查询。