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

的好名字