Python
Redis
PythonDay 7

python-stdnet

More than 3 years have passed since last update.

この記事は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と連携?とは?

こんなのがあります