python自带的数据库update之前要select吗_python sqlite3 SELECT and UPDATE导致数据库锁定...

我正在尝试做一些基本的工作,遍历一个表并更新一个行字段。但是,它给出了错误"sqlite3.OperationalError: database is locked"

可能是因为我同时在做选择和更新。不过,我不知道怎么做。在

下面是我代码的基本结构:

更新:更新代码,因此只连接一次。数据库锁定问题已消失,但循环正在重置几次:001002002003001002003

UPDATE2:再次更新代码,显然我错过了sqlite3的一些内容。但是,如果我在迭代中做了更新,前两个记录仍然会被迭代两次。因此,如果我在main中注释掉“update”函数,则迭代从0到19。但如果我把它放在那里,它是这样的:0,1,0,1,2,3,4,…19import sqlite3,time

db_file="testdb.db"

conn=sqlite3.connect(db_file)

def createTables():

cursor=conn.cursor()

cmd='''

CREATE TABLE IF NOT EXISTS photos(

photo_id CHAR(15) UNIQUE,

hosted_id CHAR(15)

);

'''

cursor.execute(cmd)

conn.commit()

cmd2="INSERT OR IGNORE INTO photos VALUES ('{}','')"

for i in range(300):

cursor.execute(cmd2.format(i))

conn.commit()

def query(cursor):

cmd='''

SELECT * FROM photos

'''

return cursor.execute(cmd)

def update(photo_id,hosted_id):

cmd='''

UPDATE photos

SET hosted_id='{hosted_id}'

WHERE photo_id = '{photo_id}'

'''.format(**locals())

cursor=conn.cursor()

res=cursor.execute(cmd)

conn.commit()

def getHostedID():

return "foo"

if __name__=="__main__":

createTables()

cur1=conn.cursor()

query(cur1)

counter=0

for i in range(20):

res=cur1.fetchone()

hosted_id=counter

print hosted_id, res[0]

#This update makes iteration funky

update(res[0],hosted_id)

counter=counter+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值