rom
この記事はPython Advent Calendar 2014の6日目です。
romはPython製のRedisオブジェクトマッパーの一つで、よくあるオブジェクトリレーショナルマッパー(ORM)のパターンに非常に似たものになっています。
機能
- モデルを定義します
- クエリでとってきます
なんかどこかでみたことありますね。
モデルの定義
このようにしてモデルを定義します。
import rom # All models to be handled by rom must derived from rom.Model class User(rom.Model): email = rom.String(required=True, unique=True, suffix=True) salt = rom.String() hash = rom.String() created_at = rom.Float(default=time.time)
なんかどこかでみたことありますね。
クエリなど
定義したものはこのように使えます。
user = User(email='user@host.com') user.salt, user.hash = gen_hash(password) user.save() user = User.get_by(email='user@host.com') at_gmail = User.query.endswith(email='@gmail.com').all()
なんかどこかでみたことありますね。
ほか
- モデルごとにデータベースを設定できるマルチデータベース
- romで定義していないモデルへのForeignKey参照フィールド
どんなときに使えるのか
- Redisが使える開発環境であり(必須) 、リレーショナルデータベースだとレイテンシが気になるとき
- Redis上で単純なデータ構造以上のものを表現したいとき
- DjangoのORMっぽいものをRedisバックエンドで使いたいとき
どうやって動いてるの
- モデルデータはプライマリキーをキーにしたHashに入っています
- モデルデータを検索可能にするためにSetやSortedSetに射影しています