подключите python к sqlite3 и заполните несколько строк за один раз - PullRequest
0 голосов
/ 10 октября 2018

это не печать Ошибка со значением r=[bounch of number] и не знаю, сколько и значением результата является имя. r

conn = sqlite3.connect('/home/cbbi-l2-16/Desktop/karim')
c = conn.cursor()

print ("Opened database successfully")
example = [r,result]

for row in c.executemany("INSERT INTO Entrez (PuId,Abstract) VALUES 
(?,?)",(r,resul)):
    print (row)

conn.commit()
c.close()

выдает ошибку:

Traceback (most recent call last):
  File "sqlpython.py", line 60, in <module>
    for row in c.executemany("INSERT INTO Entrez (PuId,Abstract) VALUES (?,?)",(r,resul)):
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 2, and there are 5 supplied.

1 Ответ

0 голосов
/ 10 октября 2018

Это неправильное использование executemany.Вы можете думать, что он действует как вложенный цикл for, где он повторяет внешний контейнер (представляющий запрос), а затем повторяет внутренний контейнер, представляющий данные, подлежащие распаковке, в запрос.

Однако,в вашем случае у вас есть только один список, который предположительно содержит строки.Таким образом, внутренний цикл «for» начинает распаковывать символы строки:

data = ['hello', 'something']

for item in data:
    for subitem in item:
        print(subitem) # this is what it's trying to insert

Это фактический вариант использования для executemany, где вы хотите распаковать значения внутри внутреннего контейнера:

data = [['hello', 'something'], ['goodbye', 'something_else']]
for item in data:
    for subitem in item:
        print(subitem) # this is what it's trying to insert

Просто используйте execute.

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