Python:获取转义的SQL字符串

1 投票
3 回答
3039 浏览
提问于 2025-04-16 00:23

当我有一个游标的时候,我知道可以安全地执行一个查询,方法如下:

cur.execute("SELECT * FROM foo WHERE foo.bar = %s", (important_variable,))

有没有办法在不执行查询的情况下,仅仅获取字符串呢?比如,如果 important_variable 是一个字符串,像 "foo 'bar' \"baz",我想要的是经过适当转义的字符串:

"SELECT * FROM foo WHERE foo.bar = "foo \'bar\' \"baz"

(或者说,适当的转义方式是什么,我也不太确定)。

我正在使用 psycopg 和 sqlobject。

3 个回答

1

SQLObject会自动处理字符的转义和引号问题,但如果你想使用这个功能,可以这样做:

from sqlobject.converters import sqlrepr
print(sqlrepr('SELECT * FROM foo WHERE foo.bar = "foo \'bar\' \"baz', 'postgres'))

结果:

'SELECT * FROM foo WHERE foo.bar = "foo ''bar'' "baz'
1

你没有告诉我们你使用的是哪个库或者数据库,不过我觉得你的问题在这里已经有答案了:如何在Python DB API/Psycopg2中显式引用字符串值

4

看看游标的mogrify方法——它会在变量绑定后返回字符串,并显示它所做的任何引号处理。

cur.mogrify("SELECT * FROM foo WHERE foo.bar = %s", ("foo 'bar' \"baz",))

撰写回答