Amazon Linux2 または CentOS7上でDjangoをインストールして、「$ python manage.py migrate」すると以下のようなエラーが出ました。
django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher.
SQLiteのバージョンが古いということで、アップグレードしても同じようなエラーが出ます。
こちらのサイト https://stackoverflow.com/questions/66380006/django-deterministic-true-requires-sqlite-3-8-3-or-higher-upon-running-python によれば、以下のようにすればよいとのことでした。
まず、pysqlite3 と pysqlite3-binary をインストールします。(仮想環境です)
(venv)$ pip install pysqlite3
(venv)$ pip install pysqlite3-binary
そして、以下のbase.pyの一部を書き換えます。
venv/python3.9/site-packages/django/db/backends/sqlite3/base.py
# from sqlite3 import dbapi2 as Database # annotation
↓ 以下のようにします。
from pysqlite3 import dbapi2 as Database # import pysqlite3
再度 migrateし、ウェブサーバーを再起動したところ動作するようになりました。
<追記>上記でもまだ動かない(500エラー)場合(特にmod_wsgiを使う場合)
Apacheのエラーログを確認すると.../django/apps/registry.py の以下の部分でエラーになっている。
raise RuntimeError("populate() isn't reentrant")
このままだと原因が分からないので raise RuntimeError~をコメントアウトして代わりに
self.app_configs = {} を追加して実際のエラーを表示させます。
以下のエラーが確認できました。
.../django/db/backends/sqlite3/base.py", line 70, in check_sqlite_version
check_sqlite_version() が実行されて sqliteバージョンが3.9.0以降でないというエラーが出て止まっていました。
とりあえず対応として check_sqlite_version() をコメントアウトして実行しないようにするとDjangoが起動できました。