【问题标题】:How to connect python to sqlite3 and fill multiple row in once如何将python连接到sqlite3并一次填充多行
【发布时间】: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']) 它不会给研究文章一堆

标签: python sqlite


【解决方案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 调用中仅使用一个占位符是正确的。
猜你喜欢
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 2018-08-06
  • 1970-01-01
  • 2018-04-21
相关资源
最近更新 更多