前提
Raspberry Pi を使用してWebアプリケーションを作成しています。
Webアプリケーションのため、言語はPython (Django)、一部C++で作成のプロセスを実行して値取得をしています。
DBはSQLiteを使用しています。
このDBには、Webアプリケーション側(Python)と Webアプリケーションから呼び出されるプロセス(C++)の
両方からアクセスします。 (SELECT, UPDATE)
実現したいこと
特に排他制御を意識して作成されていなかったため、「database is locked」というエラーメッセージが頻繁に出ます。
Python、C++の両方に排他制御を入れて、DBのロックによる異常が発生しないようにしたいです。
一方が使用中で UPDATEができない場合は、あとからアクセスしたほうが 待機するような形にしたい)
発生している問題・エラーメッセージ
「database is locked」というエラーメッセージが頻繁に出ています。
試したこと
DBの設定を共有ロック可能にしました。
C++
1 int ret = sqlite3_open_v2("DB.sqlite3",&db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_SHAREDCACHE,NULL );
Python
1 con = sqlite3.connect("DB.sqlite3", isolation_level='IMMEDIATE')
しかし、このケースでも 同一テーブルにアクセスし、一方がUPDATE処理実行中であれば
「database is locked」となってしまうのではないかと考えています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/04 03:46
2022/08/04 06:19