2016-03-21 82 views
2

我有一个python脚本,它创建一个数据库,然后进入一个无限循环,每秒运行一次,用一些选择查询数据库。SQLite数据库被SELECT子句锁定

同时我用sqlite cli连接到数据库并尝试进行更新,但是我得到一个数据库被锁定的错误。

下面的脚本(匿名)代码:

import sqlite3 
import time 

con = sqlite3.connect(r'path\to\database.sqlite') 

con.execute('DROP TABLE IF EXISTS blah;') 
con.execute('CREATE TABLE blah;') 
con.execute('INSERT INTO blah;') 

con.commit() 

while True: 
    result = con.execute('SELECT blah') 
    print(result.fetchone()[0]) 
    time.sleep(1) 
+1

你可能想关闭'fetchone'后面的游标,''result.close()' –

+0

@JoachimIsaksson恐怕它不起作用 – Hidden

+0

然后CL。的回答可能有帮助,不知道内置的事务管理。 –

回答

0

Python的sqlite3模块试图要高明和manages transactions for you

为确保您可以从其他线程/进程访问数据库,请禁用该设置(设置isolation_levelNone),并在需要时使用显式事务。 或者,每当您完成时请致电con.commit()

+0

在询问这里之前,我尝试了isolation_level“trick”,但它没有奏效,对不起,我没有提到它。也正如您在创建数据库后所提交的代码中所见,在循环中,我只使用不需要提交的SELECT子句。 – Hidden

+0

只读事务仍然会读取锁定。 –