在CentOS7上升级SQLite,并让Python使用新版SQLite

2019-06-21T08:14:00

前言

昨天晚上写一个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

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »