Я пытаюсь сопоставить строку с "%" в ней с помощью оператора 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
строк 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%"
TypeError: not enough arguments for format string'
, он обрабатывает escape %
как переменную строки формата.