Неверное количество привязок в Python Sqlite3 executemany - PullRequest
0 голосов
/ 08 марта 2020

Итак, у меня есть база данных sqlite3 в Python, где находится таблица, в которую я пытаюсь добавить 1000 строк. Проблема в том, что когда я использую команду executemany, я получаю сообщение об ошибке

sqlite3.ProgrammingError: указано неверное количество привязок. В текущем операторе используется 1, а количество предоставлено 1000.

Вот мой упрощенный код:

db = sqlite3.connect("service.db")
db.isolation_level = None
c = db.cursor()

c.execute("CREATE TABLE Places (id INTEGER PRIMARY KEY, name TEXT)")

toBeAdded = [0]*1000
i = 0
while i < 1000:
    toBeAdded[i] = ("P"+str(i+1))
    i += 1

c.executemany("INSERT INTO Places(name) VALUES (?)",[toBeAdded])

Я также пробовал разные формы этой последней команды, но не повезло , Это был единственный способ найти это в Google.

1 Ответ

2 голосов
/ 08 марта 2020

Вы предоставили плоский список executemany. Вместо этого метод ожидает вложенную структуру, где каждая внутренняя последовательность представляет набор параметров, добавляемых в запрос.

Итак, вы хотите, чтобы ['P0', 'P1', 'P2', ...] было [['P0'], ['P1'], ['P2'], ...]. Вы можете исправить это, добавив квадратные скобки при создании списка, чтобы сделать его вложенным:

toBeAdded = [0]*1000
i = 0
while i < 1000:
    toBeAdded[i] = [("P"+str(i+1))] # Note the surrounding square brackets
    i += 1

Дополнительная обратная связь

Лучший способ создать свой данные должны были бы использовать for l oop и избавиться от while l oop - у вас есть заранее определенное количество итераций, поэтому идиоматический c должен использовать for , Вам также не нужно инициализировать список заранее.

to_be_added = []
for i in range(1000):
    to_be_added.append([("P"+str(i+1))])

Или, используя понимание списка :

to_be_added = [[("P"+str(x+1))] for x in range(1000)]

Вы заметите, что я ' мы удалили camelCase из имени переменной; это соответствует руководству по стилю Python - PEP8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...