首页 文章

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

提问于
浏览
0

我的一个A Level学生试图让他们的代码在Python 3中工作,但它不断出现错误消息:“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)

并且完整的错误消息是:

Traceback(最近一次调用最后一次):文件“G:\ Dog Breeder Scenario - Python \ Insert data 2.py”,第21行,在<module>中
insert_dog_breed_data(dog_breeds)文件“G:\ Dog Breeder Scenario - Python \ Insert data 2.py”,第12行,在insert_dog_breed_data中
查询(sql,record)文件“G:\ Dog Breeder Scenario - Python \ Insert data 2.py”,第6行,在查询中
cursor.execute(SQL,数据)
sqlite3.ProgrammingError:提供的绑定数量不正确 . 当前语句使用3,并且提供了1 .

作为指南,他们遵循Python School网站的教程 - 来自https://pythonschool.net/databases/inserting-data/的任务4

任何帮助将不胜感激 . 谢谢 .

2 回答

  • 1

    您将单项元组列表传递给 insert_dog_breed_data - 仅包含品种名称 - 但SQL查询需要三个项目 - 名称,描述,previous_litters .

    请注意,新程序员可以学习的最有用的技能之一是如何阅读错误消息 . 他们 - 以及您 - 需要自己解决的所有信息都在该信息中提供 .

  • 0

    问题是(正如@DanielRoseman解释的那样) sqlite 期望元组每个包含 3 项(Breed,Description,Previous_Litters),但是您提供的元组只包含一个,因为:

    dog_breeds = [("Shih Tzu",),("Jack Russell",),("Great Dane",),("Husky"("Cavalier King Charles Spaniel",),("Pug")])
    

    一种解决方案是修改 dog_breeds 元组,然后将其传递给 insert_dog_breed_data 函数,如下所示:

    dog_breeds = [(x,) + ('', '') for x in dog_breeds]
    

    假设您没有关于Description和Previous_Litters的信息 .

    这将创建像这样的元组: ("Shih Tzu", '', '')

相关问题