Мне удалось получить один WHERE IN
, но он выглядит ужасно, и я не могу понять, как добавить секунду WHERE IN
.В настоящее время у меня есть это, которое работает:
selected_years = ['2018', '2019']
cur.execute(
"SELECT * FROM journal WHERE year IN (%s) ORDER BY date" % ','.join(
'?' * len(selected_years)
),
selected_years
)
return cur.fetchall()
Тем не менее, мне действительно не нравится его внешний вид, он не читается и выглядит примитивно, должен быть способ использовать обновленный способ Python 3 дляпример использования f-строк f"String to format {variable_name}"
Кроме того, мне нужно добавить еще один фильтр, например такой:
SELECT * FROM journal WHERE year IN ('2018', '2019') AND month IN ('01', '04', '11') ORDER BY date
Мне удалось заставить его работать с 2 фильтрами, но вхитрый способ без отправки в качестве второго параметра.Кроме того, происходит сбой, когда список содержит только один элемент, поскольку кортеж отформатирован следующим образом: WHERE year in (2018,)
с дополнительной запятой.
selected_years = tuple(selected_years)
selected_months = tuple(selected_months)
cur.execute(f"-- SELECT * FROM journal WHERE year IN {selected_years} AND month IN {selected_months} ORDER BY date")
Кто-нибудь может порекомендовать обновленный способ, который все еще читается?Я могу найти только старые ответы о переполнении стека в 2008-2012 годах с помощью Python 2.7