Python sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用3,并且提供了1

Python sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用3,并且提供了1,python,python-3.x,error-handling,sqlite,Python,Python 3.x,Error Handling,Sqlite,我的一个A级学生试图让他们的代码在Python3中工作,但它不断地出现错误消息:sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用3,提供了1个。代码如下: import sqlite3 def query(sql,data): with sqlite3.connect("DogBreeds.db") as db: cursor = db.cursor() cursor.execute(sql,data)

我的一个A级学生试图让他们的代码在Python3中工作,但它不断地出现错误消息:sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用3,提供了1个。代码如下:

import sqlite3

def query(sql,data):
    with sqlite3.connect("DogBreeds.db") as db:
        cursor = db.cursor()
        cursor.execute(sql,data)
        db.commit()

def insert_dog_breed_data(records):
    sql = "insert into DogBreed(Breed, Description, Previous_Litters) values (?,?,?)"
    for record in records:
        query(sql,record)

def insert_dog_data(records):
    sql = "insert into Dogs (Name, Date of Birth, Gender, DogBreedID) values (?,?,?,?)"
    for record in records:
        query(sql,record)

if __name__ == "__main__":
    dog_breeds = [("Shih Tzu",),("Jack Russell",),("Great Dane",),("Husky"("Cavalier King Charles Spaniel",),("Pug")]
    insert_dog_breed_data(dog_breeds)
    dogs = [("Steve", "10/08/2006", "Male",1),("John","08/05/2017", "Male",2),("Ellen", "25/12/2013","Female",3),("Betty", "13/01/2000", "Female",4),("Charlie", "30/03/2000", "Female",5),("Fred", "04/05/2000", "Male",5)]
    insert_dog_data(dogs)
dog_breeds = [(x,) + ('', '') for x in dog_breeds]
完整的错误消息是:

作为指导,他们将遵循Python学校网站上的教程-来自的任务4

任何帮助都将不胜感激。
谢谢。

您正在将一个单项元组列表传递到insert\u dog\u BRIDE\u数据中—仅包含品种名称—但SQL查询需要三项—名称、描述、前一项


请注意,新程序员可以学习的最有用的技能之一是如何读取错误消息。他们和你自己解决这个问题所需的所有信息都在这条消息中给出。

问题在于@DanielRoseman解释说,sqlite希望元组包含3个项目,每个品种、描述、以前的后代,但你提供的元组只包含一个,因为:

dog_breeds = [("Shih Tzu",),("Jack Russell",),("Great Dane",),("Husky"("Cavalier King Charles Spaniel",),("Pug")])
一种解决方案是在将其传递给insert_dog_BRIDE_data函数之前修改dog_BRIDES元组,如下所示:

import sqlite3

def query(sql,data):
    with sqlite3.connect("DogBreeds.db") as db:
        cursor = db.cursor()
        cursor.execute(sql,data)
        db.commit()

def insert_dog_breed_data(records):
    sql = "insert into DogBreed(Breed, Description, Previous_Litters) values (?,?,?)"
    for record in records:
        query(sql,record)

def insert_dog_data(records):
    sql = "insert into Dogs (Name, Date of Birth, Gender, DogBreedID) values (?,?,?,?)"
    for record in records:
        query(sql,record)

if __name__ == "__main__":
    dog_breeds = [("Shih Tzu",),("Jack Russell",),("Great Dane",),("Husky"("Cavalier King Charles Spaniel",),("Pug")]
    insert_dog_breed_data(dog_breeds)
    dogs = [("Steve", "10/08/2006", "Male",1),("John","08/05/2017", "Male",2),("Ellen", "25/12/2013","Female",3),("Betty", "13/01/2000", "Female",4),("Charlie", "30/03/2000", "Female",5),("Fred", "04/05/2000", "Male",5)]
    insert_dog_data(dogs)
dog_breeds = [(x,) + ('', '') for x in dog_breeds]
假设你没有关于描述的信息和以前的信息


这将创建像这样的元组:Shih-zi,

你能正确缩进你的代码吗?@DanielRoseman和Ev。库尼斯,我会让他们尝试一下,让你知道他们进展如何。谢谢@DanielRoseman和Ev。库尼斯,我会让他们试试,让你知道他们进展如何。