python-stdnet

この記事はPython Advent Calendar 2014の7日目です。引き続きRedisネタです。

python-stdnetはPython製のRedisオブジェクトマッパーの一つで、よくあるオブジェクトリレーショナルマッパー(ORM)のパターンに非常に似たものになっています。

機能

  1. モデルを定義します
  2. クエリでとってきます

なんか前回の記事とかわりませんね。

モデルの定義

このようにしてモデルを定義します。

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と連携?とは?

こんなのがあります