我用双反斜杠将SQL查询从python服务器传递给Oracle:
SELECT
ID
FROM
Works
WHERE
NAME IN ('ABC\ABC', 'sdf\sdfsdf', 'lkj\sdfsdf')
执行查询后,我一无所获。但当删除一个反斜杠并在DBeaver(SQL工具)中执行时,结果是可以的
表中的NAME
字段有一个反斜杠,如下所示:ABCABC
。
反斜杠不是Oracle字符串文字中的特殊字符,因此,您不需要用另一个反斜杠对其进行转义。
您确实需要通过将单引号加倍来转义一件事(假设您没有使用"q"语法),因此您将获得类似'Susan''s'
的字符串
我的问题有两种解决方案:
-
在Python中绑定SQL查询中的值:
https://cx-oracle.readthedocs.io/en/latest/user_guide/bind.html#binding-多值-对-库-类中的何处;
感谢Christopher Jones提供了在
execute
命令中绑定值的解决方案。它可以很好地使用双反斜杠。cursor.execute(""" select employee_id, first_name, last_name from employees where last_name in (:name1, :name2)""", name1="Smith", name2="Taylor")
-
播放解码/编码:如何在Python3中解码(';字符串转义';)?。