今回は、PythonからSQLを用いて、SQLiteデータベースを操作する方法を紹介する。SQLiteは、インストール不要で使える軽量でシンプルなデータベースだ。全てのデータがファイル一つにまとまるので、有益なデータがSQLiteの形式で配布されることもある。ちょっとした用途に便利なので、使い方を覚えておくと便利だ。今回は、SQLiteの英単語データベースを利用して、使い方を覚えよう。

SQLiteとは？

一般的にデータベースを使おうとすると、専用のデータベースアプリをインストールする必要がある。しかし、SQLiteは軽量なので、特別なインストール作業は必要がない。しかも、Pythonには標準でSQLiteのライブラリが入っている。軽量というのは、それだけで大きなメリットだが、SQLiteは高性能でもある。そのため、Google Chromeをはじめ、多くの本格的なアプリでも利用されている。

なお、プログラミングでデータベースを操作する場合、SQLという特別な問い合わせ言語を利用するのが一般的だ。SQLiteでもSQLを利用してデータベースを操作する。つまり、SQLの練習をするにはピッタリと言える。

また、今回は利用しないが、SQLiteのWebサイトでは、コマンドラインから利用できるツールがダウンロードできたり、使い方のドキュメントを参照できる。

今回利用する英単語データベース

今回は、オープンソースの英和辞書「ejdic-hand」を利用して、SQLiteの使い方を覚えよう。こちらからダウンロードできるので、ダウンロードしておこう。解凍すると、「ejdict.sqlite3」というデータベースファイルがあるので、このファイルをこれから実行するプログラムと同じディレクトリに配置しておこう。

もし、Google Colaboratoryを使う場合には、「PYTHON3の新しいノートブック」をクリックして、新規ノートブックを作成しよう。そして、以下のコマンドを実行する。すると、アップロードフォームが出るので、先ほど解凍したデータベースファイル「ejdict.sqlite3」をColaboratoryにアップロードしよう。

# Colaboratoryでファイルをアップロード from google.colab import files uploaded = files.upload()

Colaboratoryでファイルをアップしたところ

PythonでSQLiteに接続しよう

それでは、辞書の最初から10件を表示するプログラムを作って実行してみよう。以下のプログラムを入力したら実行してみよう。

import sqlite3 # データベースに接続 --- (*1) conn = sqlite3.connect("ejdict.sqlite3") c = conn.cursor() # SQLでデータを10件取り出す --- (*2) sql = 'SELECT * FROM items LIMIT 10' rows = c.execute(sql) # 取り出した10件を一つずつ表示 --- (*3) for n in rows: print(n)

実行すると辞書から10件が取り出され表示される。

10件の辞書を取り出したところ

プログラムを見ていこう。PythonでSQLiteを使うには、以下の手順で実行する。

- (1) データベースと接続する

- (2) SQL(問い合わせ言語)を実行する

- (3) 実行結果を一つずつ取得する



詳しく見ていこう。プログラムの(＊1)の部分で、データベースと接続するのが、『sqlite3.connect(ファイル名)』だ。SQLiteのデータベースは、一つのファイルが一つのデータベースを表すので、このように記述することができる。

次に、(＊2)の部分だが、『c.execute(SQL)』のように書いてSQLを実行する。ここでは、「items」というテーブルから10件抽出するというSQLである『SELECT * FROM items LIMIT 10』を実行した。itemsというのが、英単語辞書のデータが保存されているテーブルだ。そして、(＊3)の部分だが、for構文を使うことで、SQLの実行結果を取り出すことができる。

SQLで任意の単語を取り出してみよう

SQLを初めて見る人は、なんだか、ちょっと難しそうと感じると思う。しかし、初歩のSQLは単純なので、心配しないで見ていこう。 Pythonのプログラムはだいぶ分かったと思うので、上記のプログラムは、そのままで、(＊2)のSQLの一部分だけを書き換えて、いろいろなSQLを実行してみよう。

今度は、辞書から任意の単語を取り出してみよう。以下が、辞書データベースから「apple」の単語を取り出すSQL文だ。

sql = 'SELECT * FROM items WHERE word="apple"'

実行してみよう。

appleを調べたところ

SQLの先頭部分は同じだが、今度は、WHERE句をつけて、抽出条件を指定しているところがポイントだ。上記のように書くと、itemsというテーブルのwordフィールドが"apple"であるデータを抽出するという意味になる。そこで、もし、orangeを検索するには、以下のように記述すれば良い。

sql = 'SELECT * FROM items WHERE word="orange"'

ワイルドカード検索もできる

SQLではワイルドカード検索もできる。以下のように記述すると、「apple」から始まる単語を表示する。

sql = 'SELECT * FROM items WHERE word LIKE "apple%"'

以下は、実行して見たところだ。機嫌を取るを意味する「apple-polish」などの単語が列挙される。

ポイントは、『WHERE word LIKE "キーワード"』と書いている部分で、ワイルドカードを表す文字列は「%」だ。もし、「bi」から始まって「le」で終わる単語を調べたいという場合は、以下のように書く。

sql = 'SELECT * FROM items WHERE word LIKE "bi%le"'

実行すると、Bible(聖書)やbicycle(自転車)などの単語が表示されるだろう。

データベースの構造を調べる方法

ちなみに、データベースの構造を知りたい場合、sqlite_masterというテーブルを参照する。以下のようなプログラムを実行すると、どんなフィールドがどのように定義されているかが分かる。

import sqlite3 # データベースに接続 conn = sqlite3.connect("ejdict.sqlite3") c = conn.cursor() # SQLでデータを取り出して表示 sql = 'SELECT * FROM sqlite_master' rows = c.execute(sql) for n in rows: print(n[4])

実行すると、データベースを定義したSQLを表示する。ここでは、英単語辞書がどのように定義されているのかが確認できるだろう。

データベースの構造を表示する

まとめ

以上、簡単だが、PythonでSQLiteを操作する方法を紹介した。特に、今回は、英和辞書データベースを例にしたので、楽しくSQLを学ぶことができると思う。SQLに慣れるために、いろいろな単語を取り出して遊んでみると良いだろう。