syntax error при выполнении cursor.execute
Код функции:
SEARCH_MOVIES = "SELECT * FROM movies WHERE title LIKE %?%;"
search_term = input("Enter the partial movie title:")
def search_movies(search_term):
with connection:
cursor = connection.cursor()
cursor.execute(SEARCH_MOVIES, (f"%{search_term}%",))
return cursor.fetchall()
Лог ошибки:
File "D:\Programming\Python\Python+PostgreSQL_2.0\movie_watch_list\app.py", line 81, in <module>
prompt_search_movies()
File "D:\Programming\Python\Python+PostgreSQL_2.0\movie_watch_list\app.py", line 54, in prompt_search_movies
movies = database.search_movies(search_term)
File "D:\Programming\Python\Python+PostgreSQL_2.0\movie_watch_list\database.py", line 67, in search_movies
cursor.execute(SEARCH_MOVIES, (f"%{search_term}%",))
sqlite3.OperationalError: near "%": syntax error
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
У вас ошибка в SQL запросе. SQL движок ожидает такой запрос:
SELECT * FROM movies WHERE title LIKE '%string%'
Обратите внимание на одиночные кавычки! В том случае когда вы используете параметризованные запросы, драйвер БД сам добавит одиночные кавычки для строковых параметров. Т.е. при вызове:
cursor.execute("SELECT * FROM movies WHERE title LIKE %?%;", ("%Star Wars%",))
SQL движок получит такой запрос:
SELECT * FROM movies WHERE title LIKE %'%Star Wars%'%;
# NOTE: ------------------------------^ ------->^
NOTE: Символ процента вне строкового литерала (строка обрамленная одинарными кавычками) - является нарушением SQL синтаксиса.
Поэтому попробуйте так:
SEARCH_MOVIES = "SELECT * FROM movies WHERE title LIKE ?"
с таким SQL запросом ваш код должен работать правильно:
cursor.execute(SEARCH_MOVIES, (f"%{search_term}%",))