Я пытаюсь найти книгу в базе данных, поэтому сначала проверяю, существуют ли в БД данные, сообщенные пользователем (это может быть заголовок, ISBN или имя автора), затем проверяю, существует ли часть данных, и , наконец, я возвращаю все результаты.
Для этого я написал этот код на Python, используя SQLAlchemy и FLASK, где
searchBy
- это имя столбца в БД, а
searchFor
- данные, введенные пользователем
.
books = db.execute(f"SELECT * FROM books JOIN authors ON books.author_id = authors.id \
WHERE ({searchBy} = :searchFor) OR ({searchBy} LIKE :searchFor%)",
{"searchFor": searchFor}).fetchall()
Однако, когда :searchFor
заменяется его соответствующим значением, оно вычисляется между апостропами.
...(title = 'Animal Farm') OR (title LIKE 'Animal Farm'%)
вызывает эту ошибку
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) syntax error at or near ")"
LINE 1: ... WHERE (title = 'Love') OR (title LIKE 'Love'%)
^
Может кто-нибудь помочь мне понять, почему это происходит и как правильно это сделать?