Python Sqlite3 executemany 中的绑定数量不正确

     2023-03-23     7

关键词:

【中文标题】Python Sqlite3 executemany 中的绑定数量不正确【英文标题】:Incorrect number of bindings in Python Sqlite3 executemany 【发布时间】:2020-06-20 18:57:06 【问题描述】:

所以我在 Python 中有一个 sqlite3 数据库,其中有一个表,我试图向其中添加 1000 个字符串。问题是,当我使用 executemany 命令时出现错误

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 1000 个。

这是我的代码简化:

db = sqlite3.connect("service.db")
db.isolation_level = None
c = db.cursor()

c.execute("CREATE TABLE Places (id INTEGER PRIMARY KEY, name TEXT)")

toBeAdded = [0]*1000
i = 0
while i < 1000:
    toBeAdded[i] = ("P"+str(i+1))
    i += 1

c.executemany("INSERT INTO Places(name) VALUES (?)",[toBeAdded])

我也尝试了最后一个命令的不同形式,但没有运气。这是我在 Google 上找到的唯一方法。

【问题讨论】:

【参考方案1】:

您已向executemany 提供了一个平面列表。相反,该方法需要一个嵌套结构,每个内部序列代表一组要添加到查询的参数。

所以,您希望 ['P0', 'P1', 'P2', ...] 成为 [['P0'], ['P1'], ['P2'], ...]。您可以通过在创建列表时添加方括号来解决此问题,使其嵌套:

toBeAdded = [0]*1000
i = 0
while i < 1000:
    toBeAdded[i] = [("P"+str(i+1))] # Note the surrounding square brackets
    i += 1

其他反馈

生成数据的更好方法是使用 for 循环并摆脱 while 循环 - 您有预先确定的迭代次数要执行,因此使用 for 是惯用的.您也不需要事先初始化列表。

to_be_added = []
for i in range(1000):
    to_be_added.append([("P"+str(i+1))])

或者,使用 列表推导

to_be_added = [[("P"+str(x+1))] for x in range(1000)]

你会注意到我已经从变量名中删除了驼峰式;这符合 Python 风格指南 - PEP8

【讨论】:

SQLite3 Python:执行许多选择

】SQLite3Python:执行许多选择【英文标题】:SQLite3Python:executemanySELECT【发布时间】:2012-12-1800:43:53【问题描述】:我正在尝试使用executemany函数从具有一些WHERE约束的一行中取出表中的所有行importsqlite3con=sqlite3.connect(\'test.db\')cur=co... 查看详情

Python3 | sqlite3:executemany() 不插入任何内容

】Python3|sqlite3:executemany()不插入任何内容【英文标题】:Python3|sqlite3:executemany()insertsnothing【发布时间】:2015-12-0403:53:33【问题描述】:我正在尝试使用sqlite3的executemany()插入带有Python3的多个值。代码:importsqlite3conn=sqlite3.connect(... 查看详情

SQLite3 数学函数 Python

】SQLite3数学函数Python【英文标题】:SQLite3mathfunctionsPython【发布时间】:2022-01-2319:16:15【问题描述】:更新SQLite版本3.5.0后。可以使用SQL数学函数。如果我在pycharm查询中使用它,它工作得很好,但我无法在python代码中执行查询。... 查看详情

Python sqlite3 参数化删除表

】Pythonsqlite3参数化删除表【英文标题】:Pythonsqlite3parameterizeddroptable【发布时间】:2011-04-0920:35:40【问题描述】:我在python中删除sqlite3表时遇到问题。我正在使用标准的sqlite3模块。self.conn=sqlite3.connect(...)sql="""droptable?"""self.conn.e... 查看详情

Python将字典插入sqlite3

】Python将字典插入sqlite3【英文标题】:PythoninsertDictintosqlite3【发布时间】:2022-01-2116:33:10【问题描述】:我有一个sqlite3数据库,其中第一列是id并设置为具有自动增量的主键。我正在尝试从我的python字典中插入值:value=\'host\':[]... 查看详情

如何将 sqlite3 模块添加到 Python?

】如何将sqlite3模块添加到Python?【英文标题】:HowcanIaddthesqlite3moduletoPython?【发布时间】:2013-11-0102:19:35【问题描述】:谁能告诉我如何在最新版本的Python旁边安装sqlite3模块?我使用的是Macbook,并且在命令行上尝试过:pipinstall... 查看详情

自制 python@2 和 python 提供损坏的 sqlite3

】自制python@2和python提供损坏的sqlite3【英文标题】:homebrewpython@2andpythonprovidesbrokensqlite3【发布时间】:2019-06-2519:47:29【问题描述】:我正在使用最新版本的macOS和homebrew,brewdoctor没有发现任何问题。我只是使用brewinstallpython,brewin... 查看详情

在 sqlite3 python 模块上启用 Rtree

】在sqlite3python模块上启用Rtree【英文标题】:EnablingRtreeonsqlite3pythonmodule【发布时间】:2018-06-2309:04:31【问题描述】:尝试运行以下代码:conn.executescript("""CREATEVIRTUALTABLEHashesUSINGrtree(给出以下错误:sqlite3operationerrornosuchmodule:rtree... 查看详情

Python sqlite3选择不重复字段

】Pythonsqlite3选择不重复字段【英文标题】:Pythonsqlite3selectwithoutrepeatingfield【发布时间】:2017-08-2315:25:25【问题描述】:我在python中使用sqlite3数据库,我需要从一个日期获取所有数据,但我只需要每个用户的最后一行。让我解释... 查看详情

For Loop 或 executemany - Python 和 SQLite3

】ForLoop或executemany-Python和SQLite3【英文标题】:ForLooporexecutemany-PythonandSQLite3【发布时间】:2017-10-0219:00:10【问题描述】:我最近开始学习Python和SQL,有一个问题。在SQLite3中使用Python我编写了以下代码:#Usesqlite3inthefileimportsqlite3#C... 查看详情

如何使用带有 Python 3.7 的 sqlite3 python 模块的 FTS5 扩展?

】如何使用带有Python3.7的sqlite3python模块的FTS5扩展?【英文标题】:HowcanIusetheFTS5extensionwiththesqlite3pythonmodulewithPython3.7?【发布时间】:2020-02-1602:48:42【问题描述】:如何在Python3.7中使用FTS5扩展和sqlite3python模块?我尝试使用pythonte... 查看详情

使用 Python 和 SQLite3 创建更新记录函数

】使用Python和SQLite3创建更新记录函数【英文标题】:CreatinganUpdateRecordFunctionusingPythonandSQLite3【发布时间】:2021-04-1410:00:06【问题描述】:我目前正在为学校做一个课程项目,它是一个带有使用Tkinter、Python和SQLite3的用户界面的数... 查看详情

Python Sqlite3 executemany 中的绑定数量不正确

】PythonSqlite3executemany中的绑定数量不正确【英文标题】:IncorrectnumberofbindingsinPythonSqlite3executemany【发布时间】:2020-06-2018:57:06【问题描述】:所以我在Python中有一个sqlite3数据库,其中有一个表,我试图向其中添加1000个字符串。... 查看详情

Python / Sqlite3:使用 GROUP_CONCAT 左连接

】Python/Sqlite3:使用GROUP_CONCAT左连接【英文标题】:Python/Sqlite3:LEFTJOINwithGROUP_CONCAT【发布时间】:2017-11-2810:14:46【问题描述】:我有2张桌子:Tasks:Predecessors:ID|Task|TeamID|TaskID|PredecessorID---+------+---------+--------+--------------1|A| 查看详情

使用 Python 和 SQLite3 写入 .txt 文件

】使用Python和SQLite3写入.txt文件【英文标题】:Writingtoa.txtfileusingPythonandSQLite3【发布时间】:2021-06-0618:46:18【问题描述】:我目前正在从事一个学校项目,我必须使用Python、Tkinter和SQLite3创建一个带有GUI的数据库应用程序。我正... 查看详情

Python sqlite3 占位符

】Pythonsqlite3占位符【英文标题】:Pythonsqlite3placeholder【发布时间】:2012-08-2410:16:50【问题描述】:有没有办法为sqlite3中的查询设置占位符?我有一些可以与数据库一起使用的函数,如果它们可以同时与mysql和sqlite一起使用会更... 查看详情

无法使用 sqlite3 在磁盘上保存数据库 - Python [重复]

】无法使用sqlite3在磁盘上保存数据库-Python[重复]【英文标题】:Can\'tsaveondiskadatabasewithsqlite3-Python[duplicate]【发布时间】:2020-12-0210:56:40【问题描述】:我将sqlite3(importsqlite3)与python一起使用,但我无法将db文件保存在磁盘上(在... 查看详情

Python 3 SQLite3 - 绑定数量不正确

】Python3SQLite3-绑定数量不正确【英文标题】:Python3SQLite3-Incorrectnumberofbindings【发布时间】:2016-01-0122:49:09【问题描述】:我知道StackOverflow上有很多关于这个错误的问题,但我尝试了很多解决方案,显然它们都失败了。这是一个... 查看详情