繁体   English   中英

使用LIKE和%通配符在通过python执行的mySQL查询中转义'%'

[英]Escape a '%' in a mySQL query being executed via python with LIKE and % wildcards

我正在尝试通过LIKE运算符将字符串中带有'%'的字符串匹配,但是由于格式混乱,这给了我python TypeError

例:

SELECT *
FROM table
WHERE name LIKE "%exam\%ple%"

在python中,由于转义了LIKE通配符,查询看起来像这样

match = "%%exam\\%ple%%"

query = """
SELECT *
FROM table
WHERE name LIKE "%s"
""" % (match)

但这仍然引发了我同样的错误。

我将如何在python中将查询编写到name"exam%ple"所有实例匹配的table中?

您不需要在查询的生成中对%右边的字符串中的%实例进行转义,因此:

match = r"%exam\%ple%"  # Use r string to avoid having to double \s
query = """
SELECT *
FROM table
WHERE name LIKE "%s"
""" % (match)
print(query)  # as a check

结果是:

SELECT *
FROM table 
WHERE name LIKE "%exam\%ple%"

还要注意,您可以通过将它们加倍来有效地转义,即使它们成为文字字符,即%d =插入数字,但%% d =插入“%d”,但是对于执行的每个%操作,您都需要加倍。

更好的选择是使用字符串format命令,该命令在python 3.4+和任何python 2.7中都可用。 这使用{}作为插入点的标记(被分类为小语言),并且不会触及%符号。

In [2]: "{} == {}".format(1,2)
Out[2]: '1 == 2'

In [3]: match = r"%exam\%ple%"  # Use r string to avoid having to double \s

In [4]: query = """
   ...: SELECT *
   ...: FROM table
   ...: WHERE name LIKE "{}"
   ...: """.format(match)

In [5]: print(query)

SELECT *
FROM table
WHERE name LIKE "%exam\%ple%"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM