即使我將串列作為引數傳遞,我在執行查詢時也收到以下錯誤
TypeError: ('Params must be in a list, tuple, or Row', 'HY000')
我正在嘗試使用將多行傳遞給 sql 表 executemany
請在下面找到我的代碼并提供幫助,我是 python 新手。
query = """INSERT INTO TableTest (Summary) Values (%s)"""
val = [('SPHXNORF2ASW1'),('CHNSIRSDB1USAA'),('NKOLGTPRAVPNVM'),('STAMHO3WANCEG'),('SPHXNORWANCEG1'),('SPHXNORWANCE'),('STAMHO3WANCEG')]
cursor = conn.cursor()
cursor.executemany(query,val)
conn.commit() ```
uj5u.com熱心網友回復:
在 python 中,在 '()' 中放置一個值不會使它成為元組。所以,這段代碼
val = [('SPHXNORF2ASW1'),('CHNSIRSDB1USAA'),('NKOLGTPRAVPNVM'),('STAMHO3WANCEG'),('SPHXNORWANCEG1'),('SPHXNORWANCE'),('STAMHO3WANCEG')]
將被轉換為
['SPHXNORF2ASW1', 'CHNSIRSDB1USAA', 'NKOLGTPRAVPNVM', 'STAMHO3WANCEG', 'SPHXNORWANCEG1', 'SPHXNORWANCE', 'STAMHO3WANCEG']
如果要將其指定為元組,請添加如下所示的尾隨逗號或使用'[]'代替元組。
用:
val = [('SPHXNORF2ASW1',),('CHNSIRSDB1USAA',),('NKOLGTPRAVPNVM',),('STAMHO3WANCEG',),('SPHXNORWANCEG1',),('SPHXNORWANCE',),('STAMHO3WANCEG',)]
或者:
[ ['SPHXNORF2ASW1'], ['CHNSIRSDB1USAA'], ['NKOLGTPRAVPNVM'], ['STAMHO3WANCEG'], ['SPHXNORWANCEG1'], ['SPHXNORWANCE'], ['STAMHO3WANCEG']]
uj5u.com熱心網友回復:
我建議你先學習python。這是一個非常容易和簡單的錯誤。基本上你以錯誤的方式撰寫代碼,它應該是這樣的:
query = "INSERT INTO TableTest (Summary) Values(?)"
vals = [('SPHXNORF2ASW1'),('CHNSIRSDB1USAA'),('NKOLGTPRAVPNVM'),('STAMHO3WANCEG'),('SPHXNORWANCEG1'),('SPHXNORWANCE'),('STAMHO3WANCEG')]
cursor = conn.cursor()
# you could just do a for-loop instead of using executemany()
for val in vals:
cursor.execute(query, val)
conn.commit()
基本上,for 回圈會執行一條陳述句,直到執行完串列中的每一項。因此它將執行該陳述句 7 次,因為串列有 7 個專案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327552.html
