Как написать предложение MySQL LIKE с использованием синтаксиса qmark с библиотекой Python oursql? - PullRequest
0 голосов
/ 12 февраля 2012

Я использую библиотеку oursql Python для общения с базой данных MySQL.Я хочу написать код для поиска пользователей по имени или адресу электронной почты.Это код, который у меня есть в настоящее время:

query = get_query()
cursor.execute("""
    SELECT *
      FROM users
     WHERE full_name LIKE '%?%'
        OR email LIKE '%?%';""", (query, query))

Этот код вызывает исключение:

ProgrammingError: 0 parameters expected, 2 given

Очевидно, синтаксический анализатор считает, что знак вопроса находится отдельно от единственногострока, заключенная в кавычки, и поэтому не выполняет подстановку.Есть идеи как это исправить?

Ответы [ 2 ]

3 голосов
/ 12 февраля 2012

% в аргументе LIKE являются частью данных, которые вы хотите передать методу execute модуля DB-API, поэтому они должны быть частью аргумента, который вы передаете для заполнителя, а не часть самого запроса SQL.Например:

query = '%%%s%%' % (get_query(),)
cursor.execute("""
    SELECT *
      FROM users
     WHERE full_name LIKE ?
        OR email LIKE ?;""", (query, query))
1 голос
/ 12 февраля 2012

Я думаю, это тоже сработает:

query = get_query()
cursor.execute("""
    SELECT *
      FROM users
     WHERE full_name LIKE '%' || ? || '%'
        OR email LIKE '%' || ? || '%';""", (query, query))
...