本文介紹了Sqlite3-提供的綁定數量不正確的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
第一張海報,所以要溫柔點。我正在創建一個def,它查看一個表的列,然后找到該表的列名。然后,它使用這些列名幫助構建INSERT語句的結構,以便將數據放入該表中。
我已經檢查了此站點上的其他一些查詢,因為這似乎是泛型類型問題,但找不到與此相關的任何內容。
代碼如下:
sqlite_file = 'pmi.db'
db = sqlite3.connect(sqlite_file)
cur = db.cursor()
cur.execute('PRAGMA TABLE_INFO({})'.format(table_name))
columns = [tblcols[1] for tblcols in cur.fetchall()]
print(columns) # for testing
print(len(columns)) # for testing
lpmid_id = 2
pmname = "Test"
pmpertbl = "An"
cur.execute('INSERT INTO ' + table_name + ' VALUES(?,?,?)', [columns])
db.commit()
運行def時,‘table_name’作為參數傳遞。
我知道以下內容:
如果我不是嘗試傳遞COLUMNS變量,而是在其位置傳遞每個變量lpmidid、pmname、pmpertbl,則查詢發送時不會出錯。
當我使用變量‘Columns’執行此操作時,出現以下錯誤
>>> sqlts("lpmid")
['id', 'pmname', 'pmpertbl']
3
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
sqlts("lpmid")
File "C:/Python35/Programs/SQLTest.py", line 27, in sqlts
raise e
File "C:/Python35/Programs/SQLTest.py", line 21, in sqlts
cur.execute('INSERT INTO ' + table_name + ' VALUES(?,?,?)', [columns])
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 3, and there are 1 supplied.
前兩行是關于我的列數和列名是否正確的檢查。
任何關于哪里出了問題的想法。我有一種感覺,這可能與提取的列的格式有關,但我看不出需要做些什么才能讓它運行而不出錯!
如果您還想提及任何其他代碼特定的問題,請不要客氣!
謝謝
菲爾
推薦答案
您的代碼等同于以下內容:
columns = [1, 2.3, 'xxx']
cur.execute('INSERT INTO ' + table_name + ' VALUES(?,?,?)', [columns])
與此相同:
cur.execute('INSERT INTO ' + table_name + ' VALUES(?,?,?)', [[1, 2.3, 'xxx']])
這是一個列表,其第一個(也是唯一一個)元素是列表。
execute()
需要一個簡單列表:
columns = [...]
cur.execute('INSERT INTO ' + table_name + ' VALUES(?,?,?)', columns)
這篇關于Sqlite3-提供的綁定數量不正確的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,