我设法让一个 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/