python - 在 Python 3 和 SQLite 中使用多个 "WHERE IN",同时使其可读

标签 python python-3.x sqlite

我设法让一个 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-strings f"String 来格式化 {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")

有人可以推荐一种仍然可读的更新方式吗?我只能在 Stack Overflow 上找到 2008-2012 年使用 Python 2.7 的旧答案

最佳答案

假设您使用的是 pymysql,您可以尝试以下操作

cur.execute("SELECT * FROM journal WHERE year IN %s AND month IN %s ORDER BY date", (selected_years, selected_months))

关于python - 在 Python 3 和 SQLite 中使用多个 "WHERE IN",同时使其可读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54617332/

相关文章:

Python3 的 super 和 comprehensions -> TypeError?

python-3.x - Python sys.stdin 抛出 UnicodeDecodeError

android - 在 Sqlite 表中插入 null

python PIL 安装在共享主机上

python - 忽略 ScrollView 中的滚动交互区域

python - Django 中的非主外键

c# - 使使用 SQLiteConnection 的方法更加可重用

python - 服务器重启后守护进程的 PID 文件挂起

python - findAll-beautifulsoup-python 无法正常工作

android - IN 子句和占位符