Getting "sqlite3.ProgrammingError: Incorrect number of bindings supplied" when splitting lines from file and inserting into database
Getting "sqlite3.ProgrammingError: Incorrect number of bindings supplied" when splitting lines from file and inserting into database
我正在尝试将数据从 csv 文件导入现有数据库,该数据库有 4 列,名为 product_id、名字、姓氏、地址,这是 csv 导入的代码;
import sqlite3, csv
connection = sqlite3.connect("martin_DB3")
cursor = connection.cursor()
with open("lista.csv","r") as file:
records = 0
for i in file:
cursor.execute("INSERT INTO DATABASE VALUES (?,?,?,?)", i.split(","))
connection.commit()
records += 1
connection.close()
print ("Data has been transfered")
但我一直收到错误
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 4, and there are 1 supplied.
我做错了什么?
如果文件中的一行没有正好包含 3 个逗号,则表达式 i.split(",")
会生成长度不同于 4 的列表。
在您的例子中,该行显然不包含逗号。这可能会发生,例如,如果文件中有空行。
您可以在将结果列表传递给 cursor.execute
之前测试它的长度,如果长度不是 4,则跳过它。为此,您必须先将其分配给一个变量:
for i in file:
values = i.split(",")
if len(values) != 4:
continue
cursor.execute("INSERT INTO DATABASE VALUES (?,?,?,?)", values)
您似乎打算使用 csv
但后来您没有。
您可以这样做,它会起作用(即使您在 CSV 中缺少值):
with open("lista.csv", "r") as file:
reader = csv.DictReader(file)
for n, r in enumerate(reader):
t = tuple(r.values())
cursor.execute("INSERT INTO DATABASE VALUES (?,?,?,?)", t)
connection.commit()
print(n)
顺便说一句:DATABASE
不是 TABLE
的好名字
我正在尝试将数据从 csv 文件导入现有数据库,该数据库有 4 列,名为 product_id、名字、姓氏、地址,这是 csv 导入的代码;
import sqlite3, csv
connection = sqlite3.connect("martin_DB3")
cursor = connection.cursor()
with open("lista.csv","r") as file:
records = 0
for i in file:
cursor.execute("INSERT INTO DATABASE VALUES (?,?,?,?)", i.split(","))
connection.commit()
records += 1
connection.close()
print ("Data has been transfered")
但我一直收到错误
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 4, and there are 1 supplied.
我做错了什么?
如果文件中的一行没有正好包含 3 个逗号,则表达式 i.split(",")
会生成长度不同于 4 的列表。
在您的例子中,该行显然不包含逗号。这可能会发生,例如,如果文件中有空行。
您可以在将结果列表传递给 cursor.execute
之前测试它的长度,如果长度不是 4,则跳过它。为此,您必须先将其分配给一个变量:
for i in file:
values = i.split(",")
if len(values) != 4:
continue
cursor.execute("INSERT INTO DATABASE VALUES (?,?,?,?)", values)
您似乎打算使用 csv
但后来您没有。
您可以这样做,它会起作用(即使您在 CSV 中缺少值):
with open("lista.csv", "r") as file:
reader = csv.DictReader(file)
for n, r in enumerate(reader):
t = tuple(r.values())
cursor.execute("INSERT INTO DATABASE VALUES (?,?,?,?)", t)
connection.commit()
print(n)
顺便说一句:DATABASE
不是 TABLE