2008-01-02
pylons建站日记3_优雅的建表
昨天写按照教程写了一下数据库
感觉不是很优雅
1.表名和类的名字需要分别写,不符合一处定义的原则
2.要手工把类和table进行orm.mapper,比较麻烦
于是重新写了一个table类来负责对一个类建表,可以统一的在init用Table.do_mapper(orm)来初始化,不需要手工去一个一个的mapper
感觉不是很优雅
1.表名和类的名字需要分别写,不符合一处定义的原则
2.要手工把类和table进行orm.mapper,比较麻烦
于是重新写了一个table类来负责对一个类建表,可以统一的在init用Table.do_mapper(orm)来初始化,不需要手工去一个一个的mapper
from sqlalchemy import orm
from sqlalchemy import types
def init_model(bind):
"""Call me at the beginning of the application.
'bind' is a SQLAlchemy engine or connection, as returned by
sa.create_engine, sa.engine_from_config, or engine.connect().
"""
global engine, Session
engine = bind
Session = orm.scoped_session(orm.sessionmaker(
transactional=True, autoflush=True, bind=bind)
)
Table.do_mapper(orm)
import sqlalchemy as sa
from datetime import datetime
class Table(object):
wait_mapper={}
meta = sa.MetaData()
def __init__(self,cls,*args,**keys):
cls.table=sa.Table(
cls.__name__,self.meta,
*args,**keys
)
self.wait_mapper[cls]={}
self.cls=cls
def mapper(self,**keys):
self.wait_mapper[self.cls]=keys
@classmethod
def do_mapper(cls,orm):
wait_mapper=cls.wait_mapper
for i,keys in wait_mapper.iteritems():
orm.mapper(i,i.table,**keys)
wait_mapper={}
class IdTable(Table):
def __init__(self,cls,*args,**keys):
super(self.__class__,self).__init__(cls,
sa.Column("id",types.Integer, primary_key=True,autoincrement=True),
*args,**keys
)
def ForeignKey(cls,*args,**keys):
table_name=cls.table.name
return sa.Column(
'%s_id'%table_name,
types.Integer,
sa.ForeignKey('%s.id'%table_name),
*args,
**keys
)
class ResourceSite(object):
def __str(self):
return self.title
IdTable(
ResourceSite,
sa.Column("href", types.String()),
sa.Column("title", types.String(255)),
sa.Column("brief", types.String()),
sa.Column("update_time", types.DateTime()),
)
class Subject(object):
def __str(self):
return self.title
IdTable(
Subject,
ForeignKey(ResourceSite),
sa.Column("href", types.String()),
sa.Column("title", types.String(255)),
sa.Column("update_time", types.DateTime()),
)
class Plunder(object):
def __str(self):
return self.title
IdTable(
Plunder,
ForeignKey(Subject),
sa.Column("href", types.String()),
sa.Column("title", types.String(255)),
sa.Column("brief", types.String()),
sa.Column("update_time", types.DateTime(),default=lambda:datetime.now()),
sa.Column("tag", types.String(255)),
sa.Column("author", types.String(255)),
sa.Column("content", types.String()),
).mapper(order_by=[Plunder.table.c.update_time.desc()])
评论
guotie
2008-01-04
国内搞pylons的不多。
django的却很多,都已经有好几个上规模的网站了。
django的却很多,都已经有好几个上规模的网站了。
zuroc
2008-01-03
先简单的写一个自己用用:)
zbird
2008-01-03
pylons也可以支持Elixir,看到网上有些相关的东西。
用Elixir可以对数据库部分的工作进行一定量简化。
用Elixir可以对数据库部分的工作进行一定量简化。
zbird
2008-01-03
pylons的官方教材太差,很不系统。
而且API变化大,网上稍微老的的教程就会有问题。
官方教程里的那个wiki教程本是一个不错的入门教程,但如果完全按照教程做根本就没办法跑起来。
总的来说pylons和ROR太像,给我的体验不是很好。
而且API变化大,网上稍微老的的教程就会有问题。
官方教程里的那个wiki教程本是一个不错的入门教程,但如果完全按照教程做根本就没办法跑起来。
总的来说pylons和ROR太像,给我的体验不是很好。
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 225047 次
- 性别:

- 来自: 江苏

- 详细资料
搜索本博客
我的相册
large_icon_htm.png
共 26 张
共 26 张
最近加入圈子
最新评论
-
Python Trick 两条: 如何 ...
晕 你不解释还真看不懂
-- by huangpengxiao -
看电视<<倚天屠龙记>>随感
赞一个,呵
-- by shiren1118 -
基于jquery ui的自定义布 ...
最终版,见我的豆瓣,safari下有问题,没有启用这个脚本
-- by zuroc -
基于jquery ui的自定义布 ...
safari下jquery ui 1.52 的 draggable 居然也有问题 ...
-- by zuroc -
基于jquery ui的自定义布 ...
thanks for your working and your kindly ...
-- by shameant






评论排行榜