@yischyk

Комбинированный запрос в зависимости от условия?

Разрабатываю проект на fastapi. Один из router может принимать один или несколько параметров сразу (book_id, name)

Например
?book_id=24&name=test
или просто
?name=test


На основе полученных параметров я пытаюсь формировать sql-запрос для выдачи результатов пользователю:
cursor.fetch("""SELECT * FROM book
WHERE book_id = $1
AND name = $2
ORDER BY reach DESC OFFSET $3 LIMIT $4""", 24, 'test', 0, 20)


Но, как сказал в начале, могут быть ситуации, когда пользователь ищет в базе только по одному параметру (например, только по имени), как в таком случае формировать условия в SQL-запросе?

Можно, конечно, использовать условия в python для перебора разных вариантов запросов, но я не считаю это правильным решением.
  • Вопрос задан
  • 116 просмотров
Решения вопроса 2
tsklab
@tsklab
Здесь отвечаю на вопросы.
?book_id=24&name=test
WHERE ( $1 = 0 OR book_id = $1)
  AND ( $2 = '*' OR name = $2)
Ответ написан
Melkij
@Melkij
PostgreSQL DBA
не надо пытаться запутывать планировщик странными условиями, у него своей работы хватает. https://use-the-index-luke.com/sql/where-clause/ob...
Нужно условие в запросе? Добавьте это условие в текст запроса. Не нужно условие? Не добавляйте его в текст запроса.

Уточните в документации к своей библиотеке доступа к базе, как для неё правильно передавать переменное число параметров в параметризованный запрос (prepared statement), подобно эталонному PQexecParams.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы