2016-03-21 14 views
2

私はデータベースを作成し、いくつかの選択肢でデータベースをクエリする毎秒1回実行する無限ループに入る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_levelからNoneに設定)。必要に応じて明示的なトランザクションを使用します。 また、完了したらいつでもcon.commit()に電話してください。

+0

ここで質問する前にisolation_level "trick"を試しましたが、動作しませんでした。申し訳ありませんが、私は言及しませんでした。また、私はデータベースを作成した後にコミットするコードで見ることができるように、私はループ内でコミットを必要としないSELECT句のみを使用します。 – Hidden

+0

読み取り専用トランザクションはまだ読み取りロックを行います。 –

関連する問題