ライブラリ: peewee

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

from peewee import *

peewee は Python でデータベースを扱いやすくする「 OR マッパ」ライブラリです。 デフォルトでは PosgreSQL 、 MySQL 、 SQLite の 3 つに対応しています。

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

データベースへの接続

データベースへの接続は Database クラスのインスタンスを使って行います。

SQLite の場合は次のようになります。

# データベースに接続する
db = SqliteDatabase('db.sqlite')
db.connect()

# さまざまな処理...

# データベース接続を閉じる
db.close()

PostgreSQL や MySQL の場合はそれぞれ対応したクラスを使います。

モデルの定義

# データベース指定のための設定を格納したベースモデル
class BaseModel(Model):
    class Meta:
        database = db


# モデル Person
# person テーブルに対応する
# カラムとして name birthday を持つ
# データベースの指定は BaseModel を継承する形で行う
class Person(BaseModel):
    name = CharField()
    birthday = DateField()

    def __unicode__(self):
        return self.name

テーブルの作成

# Person クラスに対応した person テーブルを作成する
def create_tables():
    Person.create_table()


create_tables()

create_table() とは逆の、テーブルの削除に使用するメソッドは drop_table() です。

レコードの追加 (C of CRUD)

# Person クラスのインスタンスを生成し
# save メソッドでデータベースへ登録する
from datetime import date


def create_person(name, birthday):
    new_person = Person(name=name,
                        birthday=date(*birthday))
    return new_person.save()


create_person(name="name", birthday=(2014, 5, 5))

レコードの取得 (R of CRUD)

# 条件にマッチしたものを1件だけ取り出す
saigo = Person.get(Person.name == 'Saigo')
print saigo.name  # => Saigo

# 条件にマッチしたものを複数件取り出す
saigo_family = Person.filter(Person.name == 'Saigo').execute()
for s in saigo_family:
    print s.name,
# => Saigo Saigo Saigo...

get() メソッドは条件にマッチするレコードを 1 件だけ返します。 filter()execute() メソッドの組み合わせでは、条件にマッチしたレコードを複数件返します。

レコードの削除 (D of CRUD)

# すでにインスタンス化されたレコードを削除する
a_record.delete_instance()

# 条件にマッチしたものをすべて削除する
Person.delete().filter(Person.name == 'Saigo').execute()

delete_instance() はすでにインスタンス化されたレコードを 1 件削除します。 delete() ... execute() のパターンでは条件にマッチしたレコードがすべて削除されます。

レコードの更新 (U of CRUD)

# すでにインスタンス化されたレコードを更新する
a_record.name = "new name"
a_record.save()

# 条件にマッチしたものをすべて更新する
Person.update(name = "Saigoh").filter(Person.name == 'Saigo').execute()

save() はインスタンス化されたレコードを 1 件更新します。 update() ... execute() のパターンでは条件にマッチした複数件のレコードを一括で更新します。

以上です。

この他にもデータベース操作をかんたんにしてくれるさまざまなメソッドが用意されています。 詳しくは公式ドキュメントを参照してみてください。

インストール

pip が入っていればインストールは pip から行えます。

$ pip install peewee

参考