Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用“多个”;“在哪里?”;使用Python3和SQLite,同时使其可读_Python_Python 3.x_Sqlite - Fatal编程技术网

使用“多个”;“在哪里?”;使用Python3和SQLite,同时使其可读

使用“多个”;“在哪里?”;使用Python3和SQLite,同时使其可读,python,python-3.x,sqlite,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 c

我设法让一个
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\u 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")

有人可以推荐一种仍然可读的更新方式吗?我只能用Python2.7找到2008-2012年间关于堆栈溢出的旧答案,假设您使用的是pymysql,您可以尝试以下方法

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

假设您使用的是pymysql,您可以尝试以下方法

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

谢谢,但正如我在问题中所说的,我使用SQLite,而不是MySQLWell SQLite和MySQL都可以正确运行SQL命令,所以也许可以在您的代码中尝试查询,看看@NaturalBornCamperThanks是否有效,但正如我在问题中所说的,我使用SQLite,而不是MySQLWell SQLite和MySQL都可以正确运行SQL命令,因此,或许可以在代码中尝试该查询,看看它是否在@naturalborncaper中工作