【发布时间】:2016-05-05 15:52:25
【问题描述】:
在Django中,如下语句
entity_name = "a string with a ' quote"
Fiche.objects.extra(where=["'%s' LIKE fiche_name+'%s' " % (entity_name,'%%')])
导致数据库错误:
DatabaseError: ('42000', '[42000] [FreeTDS][SQL Server]Statement(s) could not be prepared. (8180) (SQLExecDirectW)')
如果我打印发送到 db 后端的 sql,我会看到如下内容:
... 'a string with a ' quote' LIKE fiche_name+'%%'
所以我尝试用反斜杠转义字符串中的引号
entity_name = "a string with a \\\' quote"
这一次,查询似乎为 DB 后端做好了充分的准备(引号已转义):
... 'a string with a \' quote' LIKE fiche_name+'%%'
但这会导致相同的数据库错误。
有人知道如何正确地转义引用吗?
编辑:我找到了解决问题的方法:我将字符串中的每个引号替换为两个引号,现在可以使用:
entity_name = entity_name.replace("'","''")
【问题讨论】: