【发布时间】:2021-01-23 06:51:25
【问题描述】:
我必须遍历数据库中的所有行,并且必须在某个位置更新它们。我写了这段代码:
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: 数据库被锁定
在第二个查询中,c1.execute("UPDATE ABC SET COLUMN1=(:COLVAL) WHERE id=(:id)",{'COLVAL':'XYZ','id':row[0]})
我不想一次获取所有行并申请循环,因为有很多数据。一次只有一行,在我的情况下:
"for row in c.execute("SELECT * FROM ABC")"
线路在做。
有人知道解决办法吗?
【问题讨论】:
-
您的代码仅更新 id=2 的行。为什么需要那个循环?
-
我包括在内只是为了让人们了解我将更新查询的某些条件。好的,我已经更新了问题
-
也许条件可以直接写在 UPDATE 语句中,你不需要获取任何行。您问题中的示例代码没有提供有关您的要求的足够信息。
-
仅在执行第二个查询时出现错误