1. ホーム
  2. python

[解決済み】OperationalError: データベースがロックされています。

2022-02-19 17:03:20

質問

アプリケーションで繰り返し操作を行った(テスト中)のですが、突然変なエラーが発生しました。

OperationalError: database is locked

サーバーを再起動しましたが、エラーは続いています。何が原因なのでしょうか?

解決方法を教えてください。

djangoのドキュメントより。

SQLiteは軽量な データベースであり、そのため 高いレベルの並行処理が必要です。 OperationalError: データベースがロックされています。 エラーは、アプリケーションが を超える並行処理が発生しています。 sqliteがデフォルトで処理できる の構成になります。このエラーは、以下のことを意味します。 あるスレッドまたはプロセスが排他的 データベース接続をロックし を待っている間に別のスレッドがタイムアウトしました。 ロックが解除されました。

Python の SQLite ラッパーはデフォルトで タイムアウト値 2番目のスレッドが待機できるのは ロックがタイムアウトして は、OperationalError: database を発生させます。 がロックされているというエラーが発生します。

このエラーが発生した場合、以下の方法があります。 で解決します。

  • 他のデータベースバックエンドに変更する。ある時点でSQLiteは実世界のアプリケーションにとってあまりにquot;lite"になり、この種の並行性エラーはその時点に達していることを示します。
  • 並行処理を減らし、データベーストランザクションが短時間で終了するようにコードを書き直す。
  • タイムアウトデータベースオプションを設定し、デフォルトのタイムアウト値を増やす

http://docs.djangoproject.com/en/dev/ref/databases/#database-is-locked-errorsoption