为什么 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 个解决方案:
在 Python 中的 SQL 查询中绑定值:
感谢 Christopher Jones 在 execute
命令中绑定值的解决方案。它适用于双反斜杠。
cursor.execute("""
select employee_id, first_name, last_name
from employees
where last_name in (:name1, :name2)""",
name1="Smith", name2="Taylor")
与 decode/encode 一起玩:how do I .decode('string-escape') in Python3?。
我使用双反斜杠将 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 个解决方案:
在 Python 中的 SQL 查询中绑定值:
感谢 Christopher Jones 在
execute
命令中绑定值的解决方案。它适用于双反斜杠。cursor.execute(""" select employee_id, first_name, last_name from employees where last_name in (:name1, :name2)""", name1="Smith", name2="Taylor")
与 decode/encode 一起玩:how do I .decode('string-escape') in Python3?。