如何显示由MySQLDB游标构造的SQL字符串?

4 投票
2 回答
2708 浏览
提问于 2025-04-17 04:41

我想自己确认一下这个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 来获取这个查询。

撰写回答