2009/06/21

autoload sqlalchemy cache

検索語と得られた知識が異るというのは良くあることですが

autoload はスババーと table 拾ってくれて何もしなくて楽チンなのですが
試してて ipython とかで file 読んだりする度に全部 table 取ってきます
まぁ、そらぁ拾ってこないと分からないんだから仕方ないし何か無駄だなぁと

で、ぐだぐだ言ってたら「cache する仕組みとかあるはずだからググれば」と
よーし父さん、と思ってとりあえず cache って入れて検索したら top に来たのが
Jonathan Ellis's Programming Blog - Spyced: Why SQLAlchemy impresses me
何やら comment 欄で cache という単語が出てきていて
Session の cache がどうとかいうことで、そうか Session が色々持ってるのかも?
という今のところ想像

で、そうじゃなくて、本文の方で
users = Table('users', metadata, autoload=True)
orders = Table('orders', metadata, autoload=True)

class User(object): pass
class Order(object): pass

mapper(User, users,
properties={
'orders':relation(mapper(Order, orders), order_by=orders.c.id),
})
ってしてはって、
あぁ、sqlalchemy.ext.declarative.declarative_base 使わなくっても十分短いし
explicit でいいのかなぁと「ハッ!」っとさせられました

でも、既存 db でなくって普通に使おうって場合は explicit ばっかじゃ疲れちゃうかなぁ
まつもとゆきひろさんも Matzにっき(2007-09-05)
それがPython的ってもんなのかねぇ
と言うてはる
Ctrl-1 とかしたこと無いしなぁ

脱線し始めたからついでに
Pylons / SQLAlchemy のチートシート集もちょっと素敵か
Pylons って Google App Engine のアカウントが取れて何か試そうと思ったときに
Django とか何かそんなの試せないのかしらついでにと思って調べてできそうで
でも Pylons のこと良く知らなかったから避けたのよね、結局 Django に。
や、そのときが Djang っぽいもの触るのも始めてだったんだけど。

閑話休題
from sqlalchemy import create_engine, Table, MetaData             
from sqlalchemy.orm import sessionmaker, relation, backref, mapper

url = 'mysql://username:password@server/db_name'
engine = create_engine(url, echo=True)
metadata = MetaData(bind=engine)

parent = Table('parent_tb', metadata, autoload=True)
child = Table('child_tb', metadata, autoload=True)

class Parent(object):
pass

class Child(object):
pass

mapper(Parent, parent,
properties={'children':relation(mapper(Child, child),
backref='parent')})


Session = sessionmaker(bind=engine)
session = Session()
こんな書き方もできまっせー、ということで
何となく DataMapper してる雰囲気を感じませんか?
あ、感じませんか、そうですか、そうですか

0 件のコメント:

コメントを投稿