昨天写按照教程写了一下数据库
感觉不是很优雅
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()])
分享到:
- 2008-01-02 18:33
- 浏览 2569
- 评论(4)
- 论坛回复 / 浏览 (4 / 3625)
- 查看更多
相关推荐
可用于UnityVR开发,3D游戏开发,高清天空盒子Skybox素材,游戏环境背景素材,无水印。 让你身临其境的天空盒子,各类题材...3-将图片拖入新建的SkyboxMaterial, 4-用刚创建的Material代替项目中原本的系统默认Skybox
In this book, cofounder and lead developer James Gardner brings you a comprehensive introduction to Pylons, the web framework that uses the best of Ruby, Python, and Perl and the emerging WSGI ...
3. **路由系统**:Pylons采用先进的URL路由系统,允许开发者通过简洁的规则定义URL结构,实现动态路由和URL重写。 4. **配置驱动**:Pylons框架的配置基于ini文件,使得开发者可以通过修改配置文件轻松调整应用设置...
在Python Web开发中,Pylons是一个轻量级、高性能的框架,它以其高度可定制性而受到开发者喜爱。Pylons采用MVC(Model-View-Controller)设计模式,允许开发者灵活选择不同的库来实现各个层的功能。在本例子中,我们...
### Pylons框架详解:《Pylons权威指南》概览与核心知识点 #### 引言 《Pylons权威指南》(Apress.the.Definitive.Guide.to.Pylons.Dec.2008)是一本针对Python Web开发框架Pylons的专业指导书籍。本书由James ...
标题中的“Pylons教程”指的是一个关于Python Web框架Pylons的学习资源,可能是系列文章或者教程。Pylons是一个轻量级、高性能的Web框架,它基于Python语言,设计目标是提供一种灵活且可扩展的环境来构建复杂的Web...
根据提供的文件信息,我们可以推断出这是一本关于Pylons框架的技术书籍,作者是James Gardner,出版于2008年。以下是对该书的关键知识点进行的详细解读。 ### 关键知识点概述 #### 1. **Pylons 框架简介** - **...
资源来自pypi官网。 资源全名:Pylons-0.8.2-py2.3.egg
Gardner -- The Definitive Guide to Pylons -- 2008 -- code.7z
塔架 Pylons是一个快速的Web应用程序开发框架。 笔记定向塔已与repoze.bfg合并,并且现在处于仅维护模式。 强烈建议新项目从新的合并的Web框架。安装。 如果要从源代码安装,可以运行以下命令: $ python setup.py ...
Pyramid 是一款现代 Python Web 开发框架,作为 Pylons 框架的升级版本,它不仅继承了原有框架的优点,还进行了诸多改进与增强。根据提供的文件描述,我们可以提炼出以下几个关键知识点: 1. **Pyramid 的独特之处*...
pyramid_debugtoolbar pyramid_debugtoolbar提供了一个调试工具栏,在您开发Pyramid应用程序时非常有用。 请注意, pyramid_debugtoolbar是Michael van ... $ git clone https://github.com/Pylons/pyramid_debugtool
**PyPI官网下载 | WebTest-2.0.27-py2.py3-none-any.whl** 在Python的生态系统中,PyPI(Python Package Index)是最重要的资源库,它为开发者提供了一个平台来分享和下载Python软件包。"WebTest-2.0.27-py2.py3-...
4. **集成其他Python框架**:PyAMF能够与多种Python Web框架集成,如Django、Flask、Pylons等,方便地实现与Flash客户端的交互。 5. **Flex和 BlazeDS集成**:如果你的项目使用了Adobe Flex或BlazeDS,PyAMF可以...
Web Server:JCR使用Pylons内建的Web server,不需要其他Server。 依赖的软件: Python 2.4 or later (2.5+ recommended) Pysqlite(DB-API 2.0 interface for SQLite databases) Setuptools Pysvn 注意:下载...