如何将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 表中

我应该如何将 LoopBack 框架应用程序连接到预先存在的/数据填充的 MySQL 数据库/数据源?

sqlite3:连接到云中的数据库(S3)

如何将多行 bash 代码粘贴到终端并一次运行?

如何将我的 Django 项目中的 jupyter-lab 连接到 Django 的模型?

python sqlite3 怎么处理