Как использовать оператор LIKE в параметризованном запросе используя библиотеку pymysql?

Оператор LIKE использует спецсимвол % как элемент регулярного выражения, например:

SELECT * FROM users WHERE bday_at LIKE '20%'

Этот же символ используется в библиотеке pymysql, при использовании параметризованных параметров, например:

cursor.execute('INSERT INTO messages (from_user_id, message) VALUES (%(id)s, %(text)s);', {'id': id, 'text': text})

Как быть, если нужно подставлять параметр в регулярное выражение оператора LIKE? Приведённый ниже код не работает, как и все вариации на тему, что удалось придумать.

cursor.execute("SELECT id FROM activities WHERE name LIKE %%(mark)s%;", {'mark': mark.lower()})

Можно конечно использовать f-строки и подставлять нужную часть непосредственно в запрос, но это плохая практика с точки зрения безопасности.


Ответы (2 шт):

Автор решения: John Smith

Не знаю, возможно это костыль, но, во всяком случае работает

cursor.execute("SELECT id FROM activities WHERE name LIKE %(mark)s;", {'mark': f'%{mark.lower()}%'})
→ Ссылка
Автор решения: Максим Корнев

При необходимости использовать символ % в запросе используйте последовательность символов %%, например:
SELECT * FROM users WHERE bday_at LIKE '20%%'

→ Ссылка