2011-04-03 90 views
6

我想插入列表的所有值到我的sqlite3数据库。当我使用python交互式解释器模拟这个查询时,我能够正确地将单个值插入到DB中。但我的代码在使用迭代时失败:sqlite3.OperationalError:数据库被锁定

... 
connection=lite.connect(db_name) 
cursor=connection.cursor() 
for name in match: 
     cursor.execute("""INSERT INTO video_dizi(name) VALUES (?)""",(name,)) 
connection.commit() 
... 

error:cursor.execute("""INSERT INTO video_dizi(name) VALUES (?)""",(name,)) 
sqlite3.OperationalError: database is locked 

任何方式来克服这个问题?

+0

此错误的一个很好的描述看这样的回答:http://stackoverflow.com/a/26864360/1157720 – sajjadG 2016-02-01 08:00:18

回答

9

当您尝试提交失败的操作时,您是否在代码的其他地方使用其他连接来开始仍处于活动状态(未提交)的事务?

+0

只有代码的sqlite3相关: 进口的sqlite3为精简版 DB_NAME =“diziport.sqlite” – Fish 2011-04-03 13:24:46

+2

先生,我很抱歉,关闭交互式解释器(处于活动模式)后,它现在正在工作 – Fish 2011-04-03 13:27:44

+0

@hasseg很高兴知道如何解决它而无需重新启动Python。我试过cursor.close()和connection.close(),del(游标),del(连接)。仍然得到这个错误。 – neuronet 2014-10-29 02:10:49

1

因为您的数据库被另一个进程或连接使用。如果您需要真正的并发性,请使用真正的RDBMS。

+1

不一定是正确的。 Berkeley DB的SQL API支持易于使用的SQLite API以及并发读写操作。你可以在这里阅读它:http://bit.ly/hY6MTm。 – dsegleau 2011-04-05 02:50:34