我有一個需要傳遞給 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
我還需要為數千個輸入執行此操作,實作相同目標的最佳優化方法是什么。我的表國家中的名稱是一個索引列
uj5u.com熱心網友回復:
您可以只轉換為元組,然后如果倒數第二個字符是逗號,則將其洗掉。
listofinput = format(tuple(input))
if listofinput[-2] == ",":
listofinput = f"{listofinput[:-2]})"
sql_query = f"""SELECT * FROM countries
where name in {listofinput};"""
uj5u.com熱心網友回復:
更改if(len(listofinput)>1):為if(len(listofinput)>=1):
這可能有效。
uj5u.com熱心網友回復:
洗掉條件if(len(listofinput)>1)。
因為如果你不轉換為元組,你的查詢應該是這樣的:
... where name in ['USA']
或者
... where name in []
and in [...]not acceptable in SQL, onlyin (...)是可以接受的。
您也可以洗掉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};
"""
uj5u.com熱心網友回復:
是的,帶有一個元素的元組將需要一個“,”為了避免您的問題,也許您可??以通過將代碼更改為以下來使用字串來代替:
listofinput = []
for i in input:
listofinput.append(i)
if(len(listofinput)>1):
listofinput = format(tuple(listofinput))
else:
listofinput='(' listofinput[0] ')'
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/535348.html
