查看经过清理的 sql 查询

See sanitized sql query

psycopg2的advised way to run a parameterized query,如果我没理解错的话,就是使用execute方法的第二个参数:

SQL = "INSERT INTO authors (name) VALUES (%s);"
data = ("O'Reilly", )
cur.execute(SQL, data)

这将清理数据、进行引用等。太棒了。不太好的是它看起来不透明;它似乎是一个修改我的代码的黑盒子。我想看看发送到数据库的实际查询是什么。有什么办法可以看到吗?

您可以使用 cursor.mogrify 方法打印带有内插值的查询:

>>> conn = psycopg2.connect(database='test')
>>> cur = conn.cursor()
>>> cur.mogrify('SELECT foo, bar, baz FROM quux WHERE a = %s', (42,))
b'SELECT foo, bar, baz FROM quux WHERE a = 42'

请注意,这是一个特定于 psycopg2 的方法 - 它不适用于其他 DB-API 连接器。