我有一个包含文件路径的 postgresql 数据库,如下所示:
create table test (path varchar(1024));
insert into test values('c:\foo\bar');
如果我尝试使用 psycopg2 匹配路径,它不起作用:
import psycopg2 as pg
cx = pg.connect()
cu = cx.cursor()
cu.execute(
'select * from test where path like %(path)s',
{'path': r'c:\foo\bar'}
)
print(cu.fetchall())
此代码不返回任何结果。
问题似乎是 Python 在内部转义了反斜杠,然后 psycopg2 的参数转义再次转义它们,所以传递给 postgresql 的内容如下所示:
select * from test where path like 'c:\\\\foo\\\\bar'
(我使用 cursor.mogrify() 确定了这一点)。
如何避免这种情况并实际使用反斜杠查询字符串?