使用 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 中编写查询来搜索 table
,其中 name
匹配 "exam%ple"
的所有实例?
您不需要在生成查询时对 % 右侧的字符串中的 % 实例进行转义,因此:
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%"
我试图通过 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 中编写查询来搜索 table
,其中 name
匹配 "exam%ple"
的所有实例?
您不需要在生成查询时对 % 右侧的字符串中的 % 实例进行转义,因此:
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%"