Python 3 中使用 Sqlite3 报 no module

  1. 1. 折腾
  2. 2. 解决
    1. 2.1. 1. 重新编译
    2. 2.2. 2. 将 python 2 的 _sqlite3.so 给 python 3 用

最近在开发一个 Telegram 小机器人,由于功能简单所以也没考虑用什么大型的关系数据库啥的,选用了 Sqlite3 这个嵌入式数据库,它的数据库就是一个文件。

程序原先使用的是 Python 2 写的,在写完核心功能后决定将代码基于 Python 3 调整一下,引人 SQLAlchemy ORM 来管理数据实体。(这次调整使用 ORM 极大方便了后面功能的加入)

调整成 Python3 后在本地运行没有任何问题,但是一发布到服务器上运行就会报 no module named '_sqlite3' 错误。

来源:https://www.kancloud.cn/smilesb101/python3_x/298898
Python 就内置了 SQLite3,所以,在 Python 中使用 SQLite,不需要安装任何东西,直接使用。

Python 3 内嵌了 Sqlite3 的呀,不是说不用装任何东西吗?怎么我这里会报错呀?

折腾

既然报没有 sqlite3 的错,我试着装上相对应的模块。但是残酷的是,试了 pip 里所有含有 sqlite 名字的模块都以失败告终。

解决

Python 3 是内置了 sqlite3 模块,但是不是所有版本的 python 3 都有。有的编译版在编译时本地没有 Sqlite3 的 Devel 包,在 configure 时是不会包含的。

1. 重新编译

以 CentOS 为例,先安装 sqlite-devel

1
yum install sqlite-devel

然后再重新编译 Python 3

1
2
./configure
make && make install
2. 将 python 2 的 _sqlite3.so 给 python 3 用

先用以下命令找到 python 2 的 sqlite3 库

1
find / -name _sqlite3.so

然后将文件复制到 python 的 lib 目录下。