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

это мой код

#!usr/bin/python

from __future__ import print_function
import sqlite3
import os, sys, subprocess
import numpy as np 
from Bio import Entrez
from Bio import Medline

Entrez.email = "shayezkarimcide@gmail.com"

handle = Entrez.esearch(db="pmc", 
term = "Antimicrobial resistance",
rettype = "medline",retmode = "txt",
retmax= '10',sort = "pub date")

result = Entrez.read(handle)

handle.close()

Id = result ['IdList']


print (list(Id), "\n")
rint ("The length of PubId is :",len(Id))


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

print ("Opened database successfully")

c.executemany("INSERT INTO Entrez (PuId) VALUES (?)", Id)

for row in c :
print (row)
conn.commit()

print ("Records Save Successfully")

conn.close()?

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

Файл "sqlpython.py", строка 42, в c.executemany ("INSERT INTO Entrez (PuId) VALUES (?) ", Id) sqlite3.ProgrammingError: указано неверное количество привязок.В текущем операторе используется 1, а поставлено 7.

1 Ответ

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

просто добавьте ? столько аргументов, которые есть в Id.

в соответствии с документами sqlite3:

Положить?в качестве заполнителя везде, где вы хотите использовать значение, а затем предоставить кортеж значений в качестве второго аргумента для метода execute () курсора.

в соответствии с документацией это должно иметь место в executemany, посмотрите на этот пример, взятый из документов:

Более крупный пример, который вставляет много записей одновременно

purchase = = ((2006-03-28',' КУПИТЬ ',' IBM ', 1000, 45.00),

(' 2006-04-05 ',' КУПИТЬ ',' MSFT ', 1000, 72.00),

('2006-04-06', 'SELL', 'IBM', 500, 53.00),]

c.executemany ('ВСТАВИТЬ В СТОИМОСТЬ АКЦИЙ (?,?,?,?,?)',покупки)

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