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 件のコメント:
コメントを投稿