如何将python连接到sqlite3并一次填充多行
Posted
技术标签:
【中文标题】如何将python连接到sqlite3并一次填充多行【英文标题】:How to connect python to sqlite3 and fill multiple row in once 【发布时间】:2019-03-13 01:05:30 【问题描述】:这是我的代码
#!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(“插入Entrez(PuId)值(?)”,Id) sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 7 个。
【问题讨论】:
请展示您通过print(result ['IdList'])
获得的收益
你猜想c.executemany("INSERT INTO Entrez (PuId) VALUES (?)", [[x] for x in Id])
print (result['IdList']) 它不会给研究文章一堆
【参考方案1】:
只需添加?
与Id
中相同的参数。
根据 sqlite3 文档:
放?作为一个占位符,无论你想在哪里使用一个值,然后提供一个值的元组作为游标的 execute() 方法的第二个参数。
根据文档,executemany
中的情况也应该如此,请查看从文档中获取的示例:
一次插入多条记录的更大示例
购买 = [('2006-03-28', '买入', 'IBM', 1000, 45.00),
('2006-04-05', '买入', 'MSFT', 1000, 72.00),
('2006-04-06', '卖出', 'IBM', 500, 53.00), ]
c.executemany('INSERT INTO stock VALUES (?,?,?,?,?)', 购买)
【讨论】:
这是不正确的。 OP 没有使用execute
,他们正在尝试使用executemany
;他们只想每行插入一个值,但重复多次。这不是添加更多占位符的情况,因为这将适用于单行
这里是从 sqlite3 文档到 python 2.7 # Larger example that inserts many records at a time purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00), ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00), ('2006-04-06', 'SELL', 'IBM', 500, 53.00), ] c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
的示例
是的,但是如果您只想每行插入一个参数,那么您不添加与其中的项目一样多的?
你的外部清单。如果我想插入 10,000 行怎么办?我应该提供 10K ?
吗?
换句话说,OP 在他们的表中有一个 column 并且他们想在该列中插入七个 rows。他们在executemany
调用中仅使用一个占位符是正确的。以上是关于如何将python连接到sqlite3并一次填充多行的主要内容,如果未能解决你的问题,请参考以下文章
需要连接到 MS Access 数据库并每 30 分钟自动将它们填充到 mysql 表中