为什么 Oracle 不将双反斜杠转义为单斜杠?

Why Oracle doesn't escape double backslashes to single?

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

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

执行查询后我什么也没得到。但是当删除一个反斜杠并在 DBeaver (SQL 工具) 中执行时,结果是可以的。

NAME table 中的字段有一个反斜杠,如下所示:ABC\ABC.

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

你确实需要转义的一件事是将单引号加倍(假设你没有使用“q”语法),所以你会有一个像 'Susan''s'

我的问题有 2 个解决方案:

  1. 在 Python 中的 SQL 查询中绑定值:

    https://cx-oracle.readthedocs.io/en/latest/user_guide/bind.html#binding-multiple-values-to-a-sql-where-in-clause;

    感谢 Christopher Jonesexecute 命令中绑定值的解决方案。它适用于双反斜杠。

     cursor.execute("""
         select employee_id, first_name, last_name
         from employees
         where last_name in (:name1, :name2)""",
         name1="Smith", name2="Taylor")
    
  2. 与 decode/encode 一起玩:how do I .decode('string-escape') in Python3?