SQL查询格式



我有一个字符串列表,我需要传递给一个sql查询。

listofinput = []
for i in input:
listofinput.append(i)
if(len(listofinput)>1):
listofinput = format(tuple(listofinput))
sql_query = f"""SELECT *  FROM countries
where
name in {listofinput};
"""

当我有一个列表时,它工作,但在只有一个值的情况下,它失败。

as listofinput = ['USA'] for one value 
but listofinput ('USA', 'Germany') for multiple

我也需要这样做上千个输入,什么是最好的优化方式来实现相同的。我的表countries中的Name是一个索引列

你可以直接转换为元组,然后如果最后第二个字符是逗号,则删除它。

listofinput = format(tuple(input))
if listofinput[-2] == ",":
listofinput = f"{listofinput[:-2]})"
sql_query = f"""SELECT *  FROM countries
where name in {listofinput};"""

if(len(listofinput)>1):改为if(len(listofinput)>=1):

删除条件if(len(listofinput)>1)

因为如果你不转换为元组你的查询应该是这样的:

... where name in ['USA']

... where name in []

in [...]SQL中不被接受,只有in (...)被接受。

你也可以删除format():

listofinput = tuple(listofinput)

最终代码:

listofinput = []
for i in input:
listofinput.append(i)
listofinput = tuple(listofinput)
sql_query = f"""SELECT *  FROM countries
WHERE
name IN {listofinput};
"""

是,只有一个元素的元组需要","为了避免这个问题,也许你可以使用string,只需将代码更改为以下代码:

listofinput = []
for i in input:
listofinput.append(i)
if(len(listofinput)>1):
listofinput = format(tuple(listofinput))
else:
listofinput='('+listofinput[0]+')'