为什么甲骨文不转义双反斜杠到单反斜杠?



我用双反斜杠将SQL查询从python服务器传递给Oracle:

SELECT
ID
FROM
Works
WHERE
NAME IN ('ABC\ABC', 'sdf\sdfsdf', 'lkj\sdfsdf')

执行查询后,我一无所获。但当删除一个反斜杠并在DBeaver(SQL工具)中执行时,结果是可以的

表中的NAME字段有一个反斜杠,如下所示:ABCABC

反斜杠不是Oracle字符串文字中的特殊字符,因此,您不需要用另一个反斜杠对其进行转义。

您确实需要通过将单引号加倍来转义一件事(假设您没有使用"q"语法),因此您将获得类似'Susan''s'的字符串

我的问题有两种解决方案:

  1. 在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")
    
  2. 播放解码/编码:如何在Python3中解码(';字符串转义';)?。

最新更新