ActiveMapper make Turbogears easy to use SqlAlchemy.
标签:
SQLAlchemy,
Turbogears
前几天第一次用了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中发挥更大的作用
1 条评论:
我用了turbogears中的sqlalchemy.
在mode里照你这样定义了,一运行tg-admin shell,就出错。提示this schemaitem is not connedted to any engine.
why?
发表评论