python sqlite3 executemany_使用`executemany`更新现有SQLite3数据库中的条目(使用Python sqlite3)...

本文探讨如何使用Python的sqlite3模块的executemany方法更新SQLite数据库中的记录,特别是在批量处理和性能优化方面。示例代码显示了在更新操作中正确使用executemany的方法,以及解决可能出现的ProgrammingError问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我知道executemany可以用来方便地将新条目添加到数据库中;与for循环中的单个执行相比,减少

Python方法调用开销很有用.但是,我想知道这是否适用于SQLite的UPDATE.

更具体地说,请考虑以下设置:

cnx = sqlite3.connect(DATABASE)

c = cnx.cursor()

for path in paths:

for data in some_computation(path):

c.execute("UPDATE TABLENAME SET cont=? WHERE id=?",(data[1],data[0]))

cnx.commit()

cnx.close()

我甚至不确定下面的方法是否会更快(必须对它进行基准测试),但问题是它不起作用,因为我做错了我假设.有关在下面的代码片段中使用executemany来完成我上面发布的任务的提示吗?

cnx = sqlite3.connect(DATABASE)

c = cnx.cursor()

for path in paths:

data_ids,data_conts = [],[]

for data in some_computation(path):

if len(data_ids) >= CHUNKSIZE:

c.executemany("UPDATE TABLENAME SET cont=? WHERE id=?",(data_conts,data_ids))

cnx.commit()

data_ids,[]

data_ids.append(data[0])

data_conts.append(data[1])

c.executemany("UPDATE TABLENAME SET cont=? WHERE id=?",data_ids))

cnx.commit()

cnx.commit()

cnx.close()

非常感谢您的提示和见解!

编辑1:

底部示例的问题:

ProgrammingError: Incorrect number of bindings supplied. The current statement uses 2,and there are 50000 supplied.

(其中CHUNKSIZE = 50000)

编辑2:

发生同样的错误

cnx = sqlite3.connect(DATABASE)

c = cnx.cursor()

for path in paths:

data_conts = []

for data in some_computation(path):

if len(data_ids) >= CHUNKSIZE:

c.executemany("UPDATE TABLENAME SET cont=? WHERE id=?",))

cnx.commit()

data_conts = []

data_conts.append([data[1],data[0]])

c.executemany("UPDATE TABLENAME SET cont=? WHERE id=?",))

cnx.commit()

cnx.commit()

cnx.close()

但感谢@falsetru我注意到我的错误,应该是

... WHERE id=?",data_conts)

并不是

... WHERE id=?",))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值