ライブラリ: sqlite3

Pythonの「sqlite3」というライブラリについてご紹介します。

import sqlite3

「sqlite3」はその名前のとおり、Pythonで「sqlite」を使うためのライブラリです。Pythonとsqlite3コマンドが入っていれば、特別な準備なしで使いはじめることができます。

以下、基本的な使い方を見ていきます。

  • データベースへの接続
  • テーブルの作成
  • レコードの挿入
  • レコードの参照
  • レコードの更新/削除

データベースへの接続

import sqlite3

print u'データベースへの接続'
con = sqlite3.connect("test_data.db")

SQLiteのデータベースに接続するには、connect()という関数を使います。

connect()を実行すると、ファイルが存在する場合にはそこに接続し、存在しない場合には新規に作成してくれます。

con.close()

処理が終わって接続を閉じるときにはclose()を使います。ファイル操作と同じように、一連の処理が終われば必ず最後に閉じる処理を行います。

テーブルの作成

データベースに接続したあとの処理は、原則的に関数execute()を通して行います。

テーブルの作成の場合も例外ではなく、execute()にSQL文を書いて渡します。

print u'テーブルの作成'
sql = u"""
create table dogs (
    id integer primary key autoincrement,
    name varchar(20),
    age integer
);
"""
con.execute(sql)

ここではSQLiteの文法についての詳細は割愛しますが、ここでは「dogs」というテーブルを作って、その中に「id」「name」「age」という3つのカラムを作成しました。

ちなみに、テーブルの削除もそのままSQL文を投げる形で行います。

print u'テーブルの削除'
sql = u"""
drop table dogs;
"""
con.execute(sql)

レコードの挿入

レコードの挿入は頻繁に行う処理なので、いくつかのやり方が用意されています。

print u'レコードの追加01'
sql = u"insert into dogs values (null, 'taro', 23)"
con.execute(sql)
con.commit()

使い切りのフォーマットでレコードをひとつだけ挿入する場合は、上記のとおりに行うとよいかと思います。

print u'レコードの追加02'
sql = u"insert into dogs values (null, ?, ?)"
con.execute(sql, (u"jiro", 10))
con.execute(sql, (u"hanako", 22))
con.commit()

統一されたフォーマットで複数の異なるレコードを挿入したい場合は、フォーマットと実データとを分けて渡すこともできます。SQL文の「?」の部分に、タプルの中身が順番に挿入されます。

この他にも「executemany()」という関数があり、これを使うともっとたくさんのレコードをまとめて挿入することができます。詳しくは公式ドキュメントの該当箇所をご覧ください。

レコードの参照

レコードを参照するときも、execute()にSQL文を渡せばOKです。

import pprint

print u'レコードの参照01'
c = con.execute(u"select * from dogs")
for row in c:
    pprint.pprint(row)
# 次のとおり表示
# (1, u'taro', 23)
# (2, u'jiro', 10)
# (3, u'hanako', 22)

戻り値から要素をひとつずつ取得すると、各レコードがタプルとして返ってきます。

print u'レコードの参照02'
c = con.execute(u"select * from dogs where age > 15")
for row in c:
    pprint.pprint(row)
# 次のとおり表示
# (1, u'taro', 23)
# (3, u'hanako', 22)

where句なども問題なく使うことができます。

print u'レコードの参照03'
c = con.execute(u"select * from dogs")
row = c.fetchone()
print row  # (1, u'taro', 23)

fetchone()を使えば、引っかかったものの中からひとつだけを取得することなんかもできます。

レコードの更新/削除

挿入と同じく、更新や削除もそれぞれupdate、deleteを使うことによって行うことができます。

print u'データの更新'
con.execute(
    u"update dogs set age=13 where name='google'")
con.commit()

また、データベースといえば、コミット、ロールバックですが、commit()の代わりにrollback()という関数を使うとロールバック処理も行うことができます。

以上です。

このsqlite3は非常にカンタン・便利なライブラリですが、SQLiteについてよく知らない状態で使い始めるとちょっと大変かもしれません。本格的に使うのであれば、まずSQLiteについて正しく学んでから使うのがよろしいかと思います。

インストール

Python 2.5 以上であればデフォルトでインストールされるので、別途インストールは不要です。

参考