![](/img/trans.png)
[英]sqlite3 works well in centos7 and python shell,but can't work in Uwsgi
[英]Using SQLite3 with Django 2.2 and Python 3.6.7 on Centos7
我將我的 Django 代碼從 2.1.7 直接移動到新的 Django 2.2。 我在 Centos7 開發環境中遇到的唯一問題是我的本地開發數據庫(sqlite3)版本與我的 Python 3.6.7 不兼容。
我從“manage.py runserver”得到的錯誤是:
django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later
我無法使用其他版本的 Python,因為這是 AWS elasticbeanstalk 支持的最大值。 Python 3.6.7 似乎帶有版本的 sqlite 模塊:
>>> import sqlite3
>>> sqlite3.version
'2.6.0'
>>> sqlite3.sqlite_version
'3.7.17'
>>>
我在本地 Centos7 工作站上使用單獨的開發帳戶並發出pipenv shell開始我的代碼開發和 IDE。
我發現的唯一解決方法是手動下載 SQLite3 autoconf 版本 3.27.2 並使用以下命令手動編譯到該開發帳戶主文件夾中:
wget https://www.sqlite.org/2019/sqlite-autoconf-3270200.tar.gz
gzip -d sqlite-autoconf-3270200.tar.gz
tar -xvf sqlite-autoconf-3270200.tar
cd sqlite-autoconf-3270200/
./configure --prefix=/home/devuser/opt/
make
make install
之后,我修改了我的 .bashrc 以反映以下內容:
export LD_LIBRARY_PATH="${HOME}/opt/lib"
當我重新登錄我的 devuser 帳戶時,這似乎可以解決問題。 我的應用程序似乎使用我的本地開發數據庫正確運行。
Python 3.6.7 (default, Dec 5 2018, 15:02:05)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
>>>import sqlite3
>>> sqlite3.version
'2.6.0'
>>> sqlite3.sqlite_version
'3.27.2'
我的本地開發數據庫是 SQLite,但是當我的 settings.py 在 AWS 上檢測到它在生產中時,它不會加載任何 SQLite3 數據庫后端(當環境變量標志 PRODUCTION 被選中時,使用 Mysql 生產數據庫作為后端)。
我對問題的理解是否正確,我的方法和實施是否可以接受?
我覺得重新編譯 python 是一個巨大的浪費時間,老實說,它可能會更快地站起來一個本地 mysql 版本並停止在 sqlite 上浪費時間......但只是復制或轉儲文件,遷移真是太好了,並加載數據以重新開始。
我正在使用 Centos7 和 python36。
[shmakovpn@localhost ~]$ ldd /usr/lib64/python3.6/lib-dynload/_sqlite3.cpython-36m-x86_64-linux-gnu.so
linux-vdso.so.1 => (0x00007ffcafdf6000)
libsqlite3.so.0 => /lib64/libsqlite3.so.0 (0x00007f0adf439000)
libpython3.6m.so.1.0 => /lib64/libpython3.6m.so.1.0 (0x00007f0adef10000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0adecf4000)
libc.so.6 => /lib64/libc.so.6 (0x00007f0ade927000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f0ade723000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f0ade520000)
libm.so.6 => /lib64/libm.so.6 (0x00007f0ade21e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0adf903000)
這意味着 python36 使用 /lib64/libsqlite3.so.0 在 python 控制台中它看起來像這樣
>>> import sqlite3
>>> sqlite3.version
'2.6.0'
>>> sqlite3.sqlite_version
'3.7.17'
需要更換庫,所以我們必須有它的新版本。 有一種方法可以做到這一點。
wget http://www6.atomicorp.com/channels/atomic/centos/7/x86_64/RPMS/atomic-sqlite-sqlite-3.8.5-3.el7.art.x86_64.rpm
sudo yum localinstall atomic-sqlite-sqlite-3.8.5-3.el7.art.x86_64.rpm
sudo mv /lib64/libsqlite3.so.0.8.6{,-3.17}
sudo cp /opt/atomic/atomic-sqlite/root/usr/lib64/libsqlite3.so.0.8.6 /lib64
再次進入 python 控制台
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.8.5'
現在看起來好多了。 讓我們嘗試創建 Django 項目並應用遷移
django-admin startproject sqlite3test
cd sqlite3test/
python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
... and so on
ls -al | grep db
-rw-r--r--. 1 shmakovpn shmakovpn 40960 апр 19 01:02 db.sqlite3
Sqlite3 數據庫創建成功!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.