`
zuroc
  • 浏览: 1311967 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

pylons建站日记3_优雅的建表

阅读更多
昨天写按照教程写了一下数据库

感觉不是很优雅

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()])




分享到:
评论
4 楼 guotie 2008-01-04  
国内搞pylons的不多。
django的却很多,都已经有好几个上规模的网站了。
3 楼 zuroc 2008-01-03  
先简单的写一个自己用用:)
2 楼 zbird 2008-01-03  
pylons也可以支持Elixir,看到网上有些相关的东西。
用Elixir可以对数据库部分的工作进行一定量简化。
1 楼 zbird 2008-01-03  
pylons的官方教材太差,很不系统。
而且API变化大,网上稍微老的的教程就会有问题。
官方教程里的那个wiki教程本是一个不错的入门教程,但如果完全按照教程做根本就没办法跑起来。
总的来说pylons和ROR太像,给我的体验不是很好。

相关推荐

    塔架pylons_VR游戏开发_天空盒子_Skybox_高清_16K_EXR

    可用于UnityVR开发,3D游戏开发,高清天空盒子Skybox素材,游戏环境背景素材,无水印。 让你身临其境的天空盒子,各类题材...3-将图片拖入新建的SkyboxMaterial, 4-用刚创建的Material代替项目中原本的系统默认Skybox

    [James_Gardner]_The_Definitive_Guide_to_Pylons(z-lib.org).rar

    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 ...

    Python库 | Pylons-0.8.2-py2.3.egg

    3. **路由系统**:Pylons采用先进的URL路由系统,允许开发者通过简洁的规则定义URL结构,实现动态路由和URL重写。 4. **配置驱动**:Pylons框架的配置基于ini文件,使得开发者可以通过修改配置文件轻松调整应用设置...

    Python Web框架Pylons中使用MongoDB的例子

    在Python Web开发中,Pylons是一个轻量级、高性能的框架,它以其高度可定制性而受到开发者喜爱。Pylons采用MVC(Model-View-Controller)设计模式,允许开发者灵活选择不同的库来实现各个层的功能。在本例子中,我们...

    Apress.the.Definitive.Guide.to.Pylons.Dec.2008

    ### Pylons框架详解:《Pylons权威指南》概览与核心知识点 #### 引言 《Pylons权威指南》(Apress.the.Definitive.Guide.to.Pylons.Dec.2008)是一本针对Python Web开发框架Pylons的专业指导书籍。本书由James ...

    借着今天的大好日子,挖一个Pylons教程的坑

    标题中的“Pylons教程”指的是一个关于Python Web框架Pylons的学习资源,可能是系列文章或者教程。Pylons是一个轻量级、高性能的Web框架,它基于Python语言,设计目标是提供一种灵活且可扩展的环境来构建复杂的Web...

    Gardner -- The Definitive Guide to Pylons -- 2008.pdf

    根据提供的文件信息,我们可以推断出这是一本关于Pylons框架的技术书籍,作者是James Gardner,出版于2008年。以下是对该书的关键知识点进行的详细解读。 ### 关键知识点概述 #### 1. **Pylons 框架简介** - **...

    PyPI 官网下载 | Pylons-0.8.2-py2.3.egg

    资源来自pypi官网。 资源全名:Pylons-0.8.2-py2.3.egg

    Gardner -- The Definitive Guide to Pylons -- 2008 -- code.7z

    Gardner -- The Definitive Guide to Pylons -- 2008 -- code.7z

    pylons:Pylons框架,社区在Pylons项目的指导下得到了维护。 与repoze.bfg合并用于金字塔框架

    塔架 Pylons是一个快速的Web应用程序开发框架。 笔记定向塔已与repoze.bfg合并,并且现在处于仅维护模式。 强烈建议新项目从新的合并的Web框架。安装。 如果要从源代码安装,可以运行以下命令: $ python setup.py ...

    Pyramid英文文档.pdf

    Pyramid 是一款现代 Python Web 开发框架,作为 Pylons 框架的升级版本,它不仅继承了原有框架的优点,还进行了诸多改进与增强。根据提供的文件描述,我们可以提炼出以下几个关键知识点: 1. **Pyramid 的独特之处*...

    pyramid_debugtoolbar:金字塔调试工具栏

    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

    **PyPI官网下载 | WebTest-2.0.27-py2.py3-none-any.whl** 在Python的生态系统中,PyPI(Python Package Index)是最重要的资源库,它为开发者提供了一个平台来分享和下载Python软件包。"WebTest-2.0.27-py2.py3-...

    Python库 | PyAMF-0.5-py2.5-linux-x86_64.egg

    4. **集成其他Python框架**:PyAMF能够与多种Python Web框架集成,如Django、Flask、Pylons等,方便地实现与Flash客户端的交互。 5. **Flex和 BlazeDS集成**:如果你的项目使用了Adobe Flex或BlazeDS,PyAMF可以...

    JCR_codereview

    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 注意:下载...

Global site tag (gtag.js) - Google Analytics