2011-04-03 91 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