解決Django:SQLite 3.8.3 or later is required


文章來源:http://coollsx.com/resolve-django-for-sqlite-3-8-3-or-later-is-required/

在我的CentOS系統上安裝了django==2.2.8並創建了一個webApps項目,使用:

$ django-admin startproject webApps

但是,當我使用以下命令初始化遷移所需模型時,發生了錯誤:

$ python3 manage.py migrate

以上命令產生了如下的錯誤輸出:

django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).

django發現Python使用的sqlite版本過低,不滿足要求。因此,我嘗試升級自帶的sqlite。使用sqlite3 –version查看了CentOS的Sqlite為3.7,我開始用yum remove sqlite移除了當前版本,並且編譯安裝高版本,參考比如:

$ wget https://www.sqlite.org/2019/sqlite-autoconf-3270200.tar.gz
$ tar -zxvf sqlite-autoconf-3270200.tar.gz
$ cd sqlite-autoconf-3270200
$ ./configure --prefix=/usr/local
$ make && make install

此時完成了sqlite 3.27.2的安裝,但是系統默認認識3.7。因此鏈接新的路徑:

$ mv /usr/bin/sqlite3  /usr/bin/sqlite3_7
$ ln -s /usr/local/bin/sqlite3   /usr/bin/sqlite3

設置共享庫路徑:export LD_LIBRARY_PATH=”/usr/local/lib”:LD_LIBRARY_PATH並執行生效source ~/.bashrc

這個時候,使用sqlite3 –version時便會輸出版本為3.27.2。可是當我再次執行python3 manage.py migrate時仍會報錯,原來python使用的sqlite還是3.7:

>>>import sqlite3                                                     
>>>sqlite3.sqlite_version
'3.7.17'

這個時候我就二丈摸不着頭腦了,google了一下,解決方式包括未正確設定sqlite、嘗試升級python版本、重新編譯python等,重新編譯太麻煩了吧,於是我發現了一個可以有效解決當前django必須使用sqlite3.8.3以上版本的問題。感謝,可以這樣嘗試:

locate django將會輸出大量包含django關鍵字的目錄文件,可以看到django安裝在哪些路徑下,在我的系統上,需要找到/…/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py這個腳本,django判斷當前使用的sqlite版本的代碼就在這里,找到以下代碼塊,注釋掉那一行代碼並更改:

def check_sqlite_version():
    # if Database.sqlite_version_info < (3, 8, 3):
    if Database.sqlite_version_info < (3, 6, 3):
        raise ImproperlyConfigured('SQLite 3.8.3 or later is required(found %s).' % Database.sqlite_version)


check_sqlite_version()

再次嘗試django-admin startproject webApps便會執行成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM