LoginSignup
14
9

More than 3 years have passed since last update.

Python3 からいろいろなバージョンの SQLite3 を使ってみましょう!

Posted at

はじめに

Python3 で、いろいろなバージョンの SQLite3 や自分たちで改良した SQLite3 を使う必要がありまして、備忘録としてまとめました。

環境

OS は、CentOS 7.7 を使用しています。Proxyなどを設定して、外部にアクセスできる状況になっています。

$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)

まず、Python3 をインストールします。Python3 のバージョンは 3.6.8 です。

$ sudo yum install python3
$ python3 --version
Python 3.6.8

SQLite3 のバージョンを SQLite3 コマンドと Python3 で確認します。

$ sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
$ python3
Python 3.6.8 (default, Aug  7 2019, 17:28:10) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.7.17'

SQLite 3.7.17 がインストールされていて、Python3 からも SQLite 3.7.17 が使用されています。

Python3 で SQLite 3.31.1 を使用

SQLite3 の最新版(3.31.1)を入手しましょう。wgetで入手して展開した後、ディレクトリ名を sqlite-3.31.01 に変更しておきます。

$ wget https://www.sqlite.org/2020/sqlite-autoconf-3310100.tar.gz
$ tar zxvf sqlite-autoconf-3310100.tar.gz
$ mv sqlite-autoconf-3310100 sqlite-3.31.01

SQLite3 をビルドします。

$ cd sqlite-3.31.01
$ ./configure
$ make
$ ./sqlite3 --version
3.31.1 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6

ファイルを確認します。ディレクトリ .libs に SQLite3 ライブラリが置かれます。

$ ls -a
.            Makefile.fallback  config.guess   install-sh     sqlite3-shell.o    sqlite3.pc
..           Makefile.in        config.log     libsqlite3.la  sqlite3-sqlite3.o  sqlite3.pc.in
.deps        Makefile.msc       config.status  libtool        sqlite3.1          sqlite3.rc
.libs        README.txt         config.sub     ltmain.sh      sqlite3.c          sqlite3ext.h
INSTALL      Replace.cs         configure      missing        sqlite3.h          tea
Makefile     aclocal.m4         configure.ac   shell.c        sqlite3.lo
Makefile.am  compile            depcomp        sqlite3        sqlite3.o
$ ls -a .libs
.   libsqlite3.a   libsqlite3.lai  libsqlite3.so.0      sqlite3.o
..  libsqlite3.la  libsqlite3.so   libsqlite3.so.0.8.6

環境変数 LD_LIBRARY_PATH に、.libs の絶対パスを指定します。

$ export LD_LIBRARY_PATH=$HOME/sqlite-3.31.01/.libs
$ echo $LD_LIBRARY_PATH
/home/mototaka/sqlite-3.31.01/.libs

Python3 で SQLite3 のバージョンを確認してみます。

$ python3
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.31.1'

Python3 から、SQLite の最新バージョンである 3.31.1 が使用できることを確認できました。SQLite ネイティブの sqlite_version() 関数でも確認してみましょう。

$ python3
>>> import sqlite3
>>> con = sqlite3.connect(":memory:")
>>> cur = con.cursor()
>>> cur.execute("SELECT sqlite_version()")
>>> cur.fetchone()
('3.31.1',)

同様に、Python3 から、SQLite の最新バージョンである 3.31.1 が使用できることを確認できました。

Python3 で SQLite 3.20.1 を使用

SQLite3 3.20.1 を入手して、ビルドします。

$ wget https://www.sqlite.org/2017/sqlite-autoconf-3200100.tar.gz 
$ tar zxvf sqlite-autoconf-3200100.tar.gz
$ mv sqlite-autoconf-3200100 sqlite-3.20.01
$ cd sqlite-3.20.01/
$ ./configure
$ make
$ ./sqlite3 --version
3.20.1 2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34

今度は、環境変数 LD_LIBRARY_PATH に、.libs の相対パスを指定します。

$ export LD_LIBRARY_PATH=./libs

Python3 で SQLite3 のバージョンを確認してみます。

$ python3
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.20.1'

Python3 から、ビルドした SQLite 3.20.1 が使用できることを確認できました。
LD_LIBRARY_PATH に、.libs の相対パスを指定することで、以下のような環境で、ディレクトリを変えることでいろいろな SQLite を Python3 から使うことが可能です。

$ ls
sqlite3.00.08  sqlite3.06.23.1  sqlite3.12.02  sqlite3.18.02  sqlite3.23.00  sqlite3.29.00
sqlite3.01.06  sqlite3.07.17    sqlite3.13.00  sqlite3.19.03  sqlite3.24.00  sqlite3.30.01
sqlite3.02.07  sqlite3.08.11.1  sqlite3.14.02  sqlite3.2.8    sqlite3.25.03  sqlite3.31.01
sqlite3.03.17  sqlite3.09.03    sqlite3.15.02  sqlite3.20.01  sqlite3.26.00
sqlite3.04.02  sqlite3.10.02    sqlite3.16.02  sqlite3.21.00  sqlite3.27.02
sqlite3.05.09  sqlite3.11.01    sqlite3.17.02  sqlite3.22.00  sqlite3.28.00

まとめ

SQLiteの場合、他データベースと違って、ドライバーやコネクション情報で接続するデータベースを変えることが難しくて、最悪 Python3 のソースコードを改良したりしないといけないかもと思っていましたが、環境変数 LD_LIBRARY_PATH を使うことで意外と簡単に、いろいろなバージョンの SQLite3 を使うことができました。
また、今回、Pyhton3 のインストール以外、root権限を使用していませんので、簡単にいろいろなバージョンで 動作確認 を試してみるには良いのではないかと思います。

もし、記述について誤りがあったり、気になることがあれば、編集リクエストやコメントでフィードバックしていただけると助かります。

14
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
9