八月 03, 2006

ActiveMapper make Turbogears easy to use SqlAlchemy.

前几天第一次用了SA,感觉还是不错的


但是按他文档里面的方法,要先定义table,再定义一个类用于和这个table的邦定,最后还需要调用mapper()绑定,还是挺繁琐的


特别是当我用在tg中,加上在model.py中的定义和controller的调试就更烦了,不过利用sa最新的插件ActiveMapper,可以把这些繁琐的步骤通通抛掉


不过am相关的文档较少,用一个最简单的例子说明下使用吧



from sqlalchemy import *
from sqlalchemy.ext.activemapper import ActiveMapper, column
class User(ActiveMapper):
class mapping:
__table__ = "user_table"
id = column(Integer, primary_key=True)
name = column(String)

首先定义一个以ActiveMapper为基类的class,再通过mapping类使得这个class能绑定到正确的表上


__table__定义的表名,表中的字段用column声明(具体的参数和SA的Column一样,SA的文档写得很清楚了)


把User定义放入model.py中,在controller中import就可以使用了(基本上和SqlObject定义的class用法一样)



from fv.model import User as usr
class index(controllers.Controller):
@expose(template="json")
def index(self):
res = usr.select()
return dict(res = res[0].name)

如果还想对结果排序还可以使用



res = usr.select(order_by=[asc(usr.c.name)])

注意要先从sqlalchemy中import asc,更多的查询方式可以参照SA上面的 Where Clause


现在ActiveMapper相关的文档还比较少,不过随着tg版本的推进和SA API的稳定,很快就会有更多相关的文档了


另外也希望AM这么灵活的ORM机制能在SA中发挥更大的作用




Technorati : , ,
Del.icio.us : , ,

1 条评论:

Yao 说...

我用了turbogears中的sqlalchemy.
在mode里照你这样定义了,一运行tg-admin shell,就出错。提示this schemaitem is not connedted to any engine.

why?