Я хочу ВЫБРАТЬ из моей базы данных PostgreSQL, используя дополнительные параметры фильтра в функции, но я пытаюсь получить правильный синтаксис.
def search(title: str = '', author: str = "", year: int, isbn: int):
conn = psycopg2.connect(
" dbname='mydb' user='postgres' password='pwd' host='localhost' port='5432' ")
curs = conn.cursor()
curs.execute("SELECT * FROM book WHERE title=? OR author=? OR year=? OR isbn=?",
(title, author, year, isbn))
rows = curs.fetchall()
conn.close()
return rows
Затем я хочу выполнить поиск, передав только один параметр (имя автора) к функции, и оператор SELECT сможет игнорировать / пропускать поля, которые не были переданы. Когда я выполняю
print(search(author="John"))
Выходные данные
Traceback (most recent call last):
File "backend.py", line 48, in <module>
print(search(author="John"))
File "backend.py", line 39, in search
(title, author, year, isbn))
psycopg2.errors.UndefinedFunction: operator does not exist: text =?
LINE 1: SELECT * FROM book WHERE title=? OR author=? OR year=? OR is...
^
HINT: No operator matches the given name and argument type. You might need to add an explicit type cast.
Я понимаю, что это связано с несоответствием между типом данных оператора SELECT и типом столбца базы данных, и что ошибка отражаетчто нет оператора = для сравнения этих двух типов данных. Но как мне определить параметры моей функции и оператор SELECT, чтобы заставить мой запрос работать?