Использование нескольких «WHERE IN» с Python 3 и SQLite, делая его читабельным - PullRequest
0 голосов
/ 10 февраля 2019

Мне удалось получить один 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

1 Ответ

0 голосов
/ 10 февраля 2019

Вы можете попробовать следующее, если вы используете pymysql

cur.execute("SELECT * FROM journal WHERE year IN %s AND month IN %s ORDER BY date", (selected_years, selected_months))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...