在CentOS7上升级SQLite,并让Python使用新版SQLite
前言
昨天晚上写一个sqlite
数据转移的程序,本地运行得很不错,想着很快打完收工了,哪知道放服务器上就开始各种报错,各种头巨大。。。
报错一:
Traceback (most recent call last):
File "read_sqlite3.py", line 12, in <module>
cursor.execute(sql)
sqlite3.OperationalError: no such table: *****s
报错二:
sqlite> .databases
Error: malformed database schema (*****s_idx) - near "WITHOUT": syntax error
憋了一晚上没什么进展,早上准备睡觉了,觉得程序还是可以抢救一下,又开始在网上各种找原因,后来想起数据库是第三方开源程序写成,并不是官方程序,最后才让我发现,原来是python
自带的sqlite3
组件版本不一致造成。
服务器上的版本:
Python 3.7.0 (default, Jun 21 2019, 00:36:41)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.7.17'
>>> exit()
本地机器上的版本:
Python 3.6.2 |Continuum Analytics, Inc.| (default, Jul 20 2017, 12:30:02) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.14.2'
>>>
真是大坑啊,搞不懂为什么会不一样呢?真糟心。。。
赶紧的准备开始服务器上的升级。。。
1、先下载、编译、安装SQLite
引擎
到SQLite
官网的下载页面:https://sqlite.org/download.html 这里是最新的版本,我们就安装它吧。
源码有两个文件,我们下第二个(sqlite-autoconf-3280000.tar.gz
),因为这个有配置文件。复制其链接,然后在终端执行:
wget https://sqlite.org/2019/sqlite-autoconf-3280000.tar.gz
tar zxvf sqlite-autoconf-3280000.tar.gz
cd sqlite-autoconf-3280000
./configure
make && make install
以默认方式安装后,会把编译好的二进制文件安装到/usr/local/lib
, 把头文件sqlite3.h sqlite3ext.h
安装到/usr/local/include
,我们需要知道这两个路径。
2、下载、编译、安装Python
请先照此文的方法做: https://e2c.net/2019/03/17/61.html
唯一的区别是,在编译时略有不同。
原来的编译过程:
cd /usr/local/python-3.7/
./configure --prefix=/usr/local/sbin/python-3.7
make && make install
修改为:
cd /usr/local/python-3.7/
LD_RUN_PATH=/usr/local/lib ./configure LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include" --prefix=/usr/local/sbin/python-3.7
LD_RUN_PATH=/usr/local/lib make
make && make install
照此安装后,已经可以使用最新版SQLite
了:
Python 3.7.0 (default, Jun 21 2019, 07:31:39)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.28.0'
>>> exit()
本文参考了Stackoverflow
上的方法,在此表示感谢~
http://stackoverflow.com/questions/26261080/compile-python-3-4-with-sqlite3
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »