質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.33%

【Django】sqlite3のバージョンアップがうまく行かない

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 317

score 22

環境

vagrant
centOS7
pyenv
python3.8.3
django3.1.6

目的

上記環境でdjangoプロジェクトを立ち上げたい

ご相談内容

上記環境でrunserverをすると、以下のようなエラーが起きます。
sqlite3.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher

[vagrant@localhost rest_test2]$ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/home/vagrant/.pyenv/versions/3.8.3/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
    self.connect()
  File "/home/vagrant/.pyenv/versions/3.8.3/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "/home/vagrant/.pyenv/versions/3.8.3/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/home/vagrant/.pyenv/versions/3.8.3/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "/home/vagrant/.pyenv/versions/3.8.3/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 215, in get_new_connection
    create_deterministic_function('django_date_extract', 2, _sqlite_datetime_extract)
sqlite3.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher

試したこと

以下の記事を参考にsqlite3のバージョンアップ
https://qiita.com/rururu_kenken/items/8202b30b50e3bfa75821

python shellでは確かにバージョンアップされているのですが、runserverをするとエラーが改善されておらず、お手上げです。

>>> import sqlite3
>>> sqlite3.sqlite_version
'3.31.1'


どなたかお助けください。。。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • dameo

    2021/02/23 01:23

    問題は結構複雑なようです。
    まずdjangoのバージョンが3.1.6だと、sqliteは3.8.3以上でないと動きません。
    しかし、centOS7はデフォルトだと3.7.17で、動かすことができません。
    質問者さんはpyenvでpython 3.8.3を入れているようですが、pyenvはpythonをビルドしてインストールする形になります。その際に、sqliteを呼び出す部分もコンパイルしているので、そのときにsqlite 3.7.17に合わせて呼出部分が出来上がります。つまり、実際にロードしたライブラリが3.8.3以上でもその判定自体をしないのです。
    そのため、sqlite3.sqlite_versionが3.31.1でもエラーが発生します。

    対応方法は、sqlite3はちゃんと3.31.1をロードできる状態で、pyenvでpython 3.8.3を入れ直すことです。
    例えば、sqlite3の3.31.1をsudo make installしてから、ld.so.conf.dにファイルを作って/usr/local/libを追加して、ldconfigで更新し、ldconfig -pで正しいバージョンを読めることを確認してから、pyenvで入れ直す(pyenv uninstall 3.8.3してから再度入れ直す)、で多分動くと思います。
    sqliteのバージョンアップはldconfigでシステムワイドにしなくても、LD_LIBRARY_PATHを使ってローカルにやっても、非公式リポジトリから新しいバージョンのパッケージを入れても構いません。

    キャンセル

  • dameo

    2021/02/23 01:26

    追加情報:
    https://github.com/coleifer/pysqlite3/blob/master/src/connection.c#L1016
    一応ここがその呼出部分です。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る