Nano Hash - криптовалюты, майнинг, программирование

sqlite3.ProgrammingError: предоставлено неверное количество привязок. Текущий оператор использует 3, и есть 1 предоставленный

один из моих студентов уровня A пытается заставить свой код работать в 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 (most recent call last):   File "G:\Dog Breeder Scenario - Python\Insert data 2.py", line 21, in <module>
insert_dog_breed_data(dog_breeds)   File "G:\Dog Breeder Scenario - Python\Insert data 2.py", line 12, in insert_dog_breed_data
query(sql,record)   File "G:\Dog Breeder Scenario - Python\Insert data 2.py", line 6, in query
cursor.execute(sql,data)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 3, and there are 1 supplied.

В качестве руководства они следуют учебнику с веб-сайта Python School — Задача 4 с https://pythonschool.net/databases/inserting-data/

Любая помощь будет оценена. Спасибо.


  • не могли бы вы сделать правильный отступ в коде 19.05.2017

Ответы:


1

Вы передаете список кортежей с одним элементом в insert_dog_breed_data, содержащий только название породы, но SQL-запрос ожидает три элемента: имя, описание, предыдущие_пометы.

Обратите внимание: один из самых полезных навыков, которым может овладеть новый программист, — это чтение сообщений об ошибках. Вся информация, необходимая им — и вам — для самостоятельного решения этой проблемы, была представлена ​​в этом сообщении.

19.05.2017
  • Спасибо @DanielRoseman и Ev. Кунис, я заставлю их попробовать это и дам тебе знать, как у них дела. 19.05.2017

  • 2

    Проблема в том (как объяснил @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]
    

    Предположим, что у вас нет информации о Описании и Previous_Litters.

    который создаст такие кортежи, как этот: ("Shih Tzu", '', '')

    19.05.2017
  • Спасибо @DanielRoseman и Ev. Кунис, я заставлю их попробовать это и дам тебе знать, как у них дела. 19.05.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..