[英]Python sqlite3 error -executemany function
我正在從文本文件導入數據,
1,A1,芝加哥。
2,B1,紐約。
3,K2,洛杉磯。
d=open('file.txt','r')
data=d.readlines()
data1=[]
for items in data:
data1=items.split()
#print(data1)
stmt = "INSERT INTO Student1 VALUES (?,?,?)"
cu.executemany(stmt, data1)```
I am getting this error.
cu.executemany(stmt, data1)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 4, and there are 2 supplied.
要使用“executemany”,您需要傳遞元組列表:
conn = sqlite3.connect('test.db')
cu = conn.cursor()
d = open('file.txt', 'r')
data = d.readlines()
data1 = []
for items in data:
data1 += [items.split()]
stmt = "INSERT INTO Student1 VALUES (?,?,?,?)"
cu.executemany(stmt, data1)
conn.commit()
使用 executemany 插入行列表。 或者改為“執行”
for items in data:
data1=items.split()
#print(data1)
stmt = "INSERT INTO Student1 VALUES (?,?,?)"
cu.execute(stmt, data1)
executemany() 這個 function 需要第二個參數作為 python 中的元組列表。代碼中的 data1 變量是沒有元組的列表。 你可以使用類似下面的東西。
import sqlite3
d=open('file.txt','r')
data=d.readlines()
data1=[]
data1_in_list_of_tuple = []
for items in data:
data1=items.split()
data1_in_list_of_tuple.append(tuple(data1))
stmt = "INSERT INTO Student1 VALUES (?,?,?)"
cu.executemany(stmt, data1_in_list_of_tuple)
由於您一次只插入一名學生,因此請改用cursor.execute
。
創建數據(基本上等同於讀取文件):
In [1]: txt = '''1, A1, chicago.
...: 2, B1, NY.
...: 3, K2, LA.'''
Out[1]: '1, A1, chicago.\n2, B1, NY.\n3, K2, LA.'
In [2]: data = txt.splitlines()
Out[2]: ['1, A1, chicago.', '2, B1, NY.', '3, K2, LA.']
用於正確的數據處理;
.
在每一行的末尾。split
在,
,strip
所有零件。讓我們測試如何做到這一點:
In [4]: item = [j.strip() for j in data[0][:-1].split(",")]
Out[4]: ['1', 'A1', 'chicago']
這看起來不錯。
創建數據庫和表(注意我已經編造了字段名稱):
In [5]: import sqlite3
In [6]: con = sqlite3.connect(':memory:')
Out[6]: <sqlite3.Connection at 0x80414cd50>
In [7]: cur = con.cursor()
Out[7]: <sqlite3.Cursor at 0x8041aab20>
In [8]: cur.execute("CREATE TABLE Student1 (num INTEGER, grade TEXT, location TEXT)")
Out[8]: <sqlite3.Cursor at 0x8041aab20>
現在我們可以插入所有學生:
In [9]: for line in data:
...: items = tuple(j.strip() for j in line[:-1].split(","))
...: cur.execute("INSERT INTO Student1 VALUES (?,?,?)", items)
...:
檢查它是否有效:
In [10]: for row in cur.execute("SELECT * FROM Student1"):
...: print(row)
...:
(1, 'A1', 'chicago')
(2, 'B1', 'NY')
(3, 'K2', 'LA')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.