如何使用Python列表中的值查询SQLite数据库?

如何使用Python列表中的值查询SQLite数据库?,python,sql,sqlite,Python,Sql,Sqlite,这是特定于Python的,因此没有完全的帮助 我有一个ID列表 [120931, 129301923, 1293019, 193923, 42939] 而不是为它们中的每一个运行命令,例如 for row in c.execute(f'SELECT * from sdk WHERE app = 120931'): print(row) 我想传入“app”的整个ID列表,并获取这些ID出现的每一行。但是,与下面类似,查询中有一个变量(python列表) for row in c.exe

这是特定于Python的,因此没有完全的帮助

我有一个ID列表

[120931, 129301923, 1293019, 193923, 42939]
而不是为它们中的每一个运行命令,例如

for row in c.execute(f'SELECT * from sdk WHERE app = 120931'):
    print(row)
我想传入“app”的整个ID列表,并获取这些ID出现的每一行。但是,与下面类似,查询中有一个变量(python列表)

for row in c.execute(f'SELECT * from sdk WHERE app IN (120931, 129301923, 1293019, 193923, 42939)'):
    print(row) # passes entire list in parens but as a Python variable

我尝试了字符串插值,但没有成功。

您可以使用
str.join
语句中的sql
提供正确的格式:

apps = [120931, 129301923, 1293019, 193923, 42939]
c.execute(f'SELECT * from sdk WHERE app IN ({", ".join(map(str, apps))})')
c.execute(f'SELECT * from sdk WHERE app IN ({", ".join(["?"]*len(apps))})', apps)
但是,如果
apps
包含字符串值,则可以在语句中使用
符号。这样,就可以让sqlite3处理语句的正确格式:

apps = [120931, 129301923, 1293019, 193923, 42939]
c.execute(f'SELECT * from sdk WHERE app IN ({", ".join(map(str, apps))})')
c.execute(f'SELECT * from sdk WHERE app IN ({", ".join(["?"]*len(apps))})', apps)

符号也更安全。它对OPs整数也很好(我开始写我自己的答案,直到我意识到你也包括参数化查询)。事实上,如果列表的一个值是
None
,则参数化查询也将避免爆炸,这需要
null
,而不是在非参数化查询中
'None'