python-stdnet
この記事はPython Advent Calendar 2014の7日目です。引き続きRedisネタです。
python-stdnetはPython製のRedisオブジェクトマッパーの一つで、よくあるオブジェクトリレーショナルマッパー(ORM)のパターンに非常に似たものになっています。
機能
- モデルを定義します
- クエリでとってきます
なんか前回の記事とかわりませんね。
モデルの定義
このようにしてモデルを定義します。
from stdnet import odm class User(odm.StdModel): email = odm.SymbolField(required=True, unique=True) salt = odm.CharField() hash = odm.CharField() created_at = odm.DateTimeField(default=time.time)
SymbolFieldとCharFieldはどちらも文字列を格納する目的ですが、SymbolFieldがインデックスされ、CharFieldはインデックスされません。
あんまり前回の記事とかわりませんね。
クエリなど
定義したものはこのように使えます。
models = orm.Router('redis://localhost?db=1') models.register(User) user = models.user.new(email='user@host.com') user.salt, user.hash = gen_hash(password) user.save() user = models.user.get(email='user@host.com') at_gmail = models.user.filter(email__endwith='@gmail.com').all()
ルーターに対してモデルを登録してクエリでとってくるやりかたです。
ほか
- python-stdnetで定義していないモデルへの参照を可能にするModelField
どんなときに使えるのか
- 基本的に前回の記事のromと同じユースケースです
- RedisのCPUを比較的に多めに使う設計になっているのでRedisが暇そうならこちら
どうやって動いてるの
- 基本的に前回の記事のromと同じです
どっち使えばいいのさ
- Redis以外のバックエンドも検討するならpython-stdnet
- プライマリキーを任意に設定したいならpython-stdnet
- シンプルにマッピングしたいだけならrom
- Djangoと連携をしたいならpython-stdnet
Djangoと連携?とは?
こんなのがあります