我有一个字符串列表,我需要传递给一个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]+')'