gpt4 book ai didi

python - 对数据库执行多项操作时出错

转载 作者:行者123 更新时间:2023-12-04 08:13:03 25 4
gpt4 key购买 nike

我必须遍历数据库中的所有行,并且必须在某个位置更新它们。我写了这段代码:

import sqlite3
con=sqlite3.connect("Models.db")
c=con.cursor()
c1=con.cursor()
c.execute("CREATE TABLE ABC(id INTEGER PRIMARY KEY, COLVAL text)")
///inserted a few rows........
for row in c.execute("SELECT * FROM ABC"):
if $(any condition):
with con:
c1.execute("UPDATE ABC SET COLUMN1=(:COLVAL) WHERE id=(:id)",{'COLVAL':'XYZ','id':row[0]})
但我收到一个错误:

OperationalError: database is locked


在第二个查询中, c1.execute("UPDATE ABC SET COLUMN1=(:COLVAL) WHERE id=(:id)",{'COLVAL':'XYZ','id':row[0]})
我不想一次获取所有行并申请循环,因为有很多数据。一次只有一排,在我的情况下:
"for row in c.execute("SELECT * FROM ABC")"   
行在做。
有谁知道它的解决方案?

最佳答案

基本上你可以在一个列表中循环,例如 c.execute("SELECT * FROM abc").fetchall()

c.execute("CREATE TABLE IF NOT EXISTS abc(id INT PRIMARY KEY, column1 TEXT)")
///inserted a few rows........
for row in c.execute("SELECT * FROM abc").fetchall():
if $(any condition):
c.execute("UPDATE abc SET column1=(?) WHERE id=(?)",('XYZ',row[0],))
con.commit()
con.close()
此外;
  • 添加 IF NOT EXISTS到 DDL 声明
  • 用问号替换参数占位符更安全
  • 无需打开多个游标
  • 不要错过最后提交 DML 语句

  • 额外提示:使用 executemany作为
    c.executemany("UPDATE abc SET column1=(?) WHERE id=(?)",[('XYZ',row[0],)])
    而不是 execute对于多数据的 DML 语句,性能更高。实际上,您不需要当前的情况,因为每个 id 仅涉及一行值(value)

    关于python - 对数据库执行多项操作时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65856553/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com