SQLite インストールと基本操作

大きなデータを扱う機会が増えて、csvでは重かったり、手の届かない処理をしたいと思ってデータベースSQLを触ったことがあります。
SQLcsvなどに比べて軽く、準備されている関数(SQL文)をプログラムから投げることでソートや検索のプログラムを組まなくとも結果を返してくれるなどの利点があります。
多くのサイトや企業でも採用されているようです。
一方で、多くのプログラミング言語が対応しているものの、SQLのライブラリを持っていなければ、扱うのは面倒臭いかもしれません。
その場合、SQLでとりあえずなんでも保存して、必要な部分だけcsvとして用いる、という手法が便利ですね。
PythonによるSQLの扱い方も最後に紹介します。


今回はSQLの導入と基本的な構成・操作を紹介したいと思います。(Ubuntu14.04)
まずインストールは端末で、

sudo apt-get install sqlite3

で出来ます。

続いて起動です。

sqlite3 sample.sqlite3

として、sample.sqlite3を作ってみましょう。

create table book(author varchar(50),title varchar(50),price int);

と入力してみて下さい。
ここまでで、sample.sqlite3ファイルの中に、bookというテーブルが作成されました。
bookというテーブルはauthor、priceという変数を持っていて、その変数に文字列が保存されるという仕組みです。

ここまでで、データを入れる型を作る作業ができました。
実際にデータを入れてみましょう。

insert into book values ("Richard Phillips Feynman","The Feynman Lectures on Physics",3600);

これで、Richard Phillips Feynman著、The Feynman Lectures on Physic、3600円というデータが得られた訳です。

入っているデータを確認するには、以下のように打ち込みます。

select * from book;

SQLの各種文法や関数は僕自身学んでいる途中ということで、他のサイトに任せたいと思います。


SQL文をプログラミング言語から投げて、データを保存する、といったことができます。
Pythonでの使い方を紹介します。
Pythonによってネット上からデータを取得したり、或いは実験データの数値を算出して、それをSQLに保存するといった芸当が可能になります。
この連動自体は極めて簡単ですので、SQLの文法を学ぶより先に読んでもよいと思います。

#coding:utf-8
import sqlite3

#sqlite3のデータベースに接続
con = sqlite3.connect("sample.sqlite3") 

#SQL文の作成
sql=u"""
create table book(
	author varchar(50),
	title varchar(50),
	price int
);
"""

#sqlへ投げかける
con.execute(sql)

#接続の解除
con.close()

SQL文を作って、それをcon.execute(sql)によって投げかけるだけで終わりです。


データを読む操作の例として、データが登録されているか確認する関数を作ってみましょう。
まだ紹介していないSELECT文を使っていますので、読めばわかると思いますが、詳しくは調べてみて下さい。

def is_exist_author(target):
	sql = 'SELECT author FROM book author ="' + target + '"'
	cur = con.execute(sql)
	if len(cur.fetchall()):
		return True
	else:
		return False

bookテーブルのauthor属性の中に、targetというデータが含まれていた場合Trueを返し、存在しない場合はFalseを返します。
curはSQLによる出力を保存していて、fetchall()メソッドの結果が0より大きければTrue(データあり)ですね。
これを使えばデータの重複を確認することなどもできます。


以前、Amazonの書籍データを可視化した際にも実はSQLデータベースを使っていました。
そのときは、
1,PythonによってAmazonAPIからデータ取得、著者やタイトルなどをSQL文に書き直す。
2,SQLにデータを貯めこむ。
3,PythonによってSQLcsv形式に変換する。
4,Cytoscape、R、NetworkX(Python)によって可視化させる。
という流れを取りました。