在通过python执行的mysql查询中用like和%通配符转义“%”

cvxl0en2  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(429)

我试图通过like运算符匹配字符串中带有“%”的字符串,但这给了我一个python TypeError 因为格式弄乱了。
例子:

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

在python中,由于转义了类似通配符的

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

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

但这仍然让我犯同样的错误。
如何用python编写查询来进行搜索 table 哪里 name 匹配的所有示例 "exam%ple" ?

aor9mmx1

aor9mmx11#

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

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 命令,该命令在Python3.4和任何Python2.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%"

相关问题