栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用SQLAlchemy创建SQL视图?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用SQLAlchemy创建SQL视图?

更新:
又见SQLAlchemy的使用配方这里

据我所知,开箱即用不支持创建(只读非实例化)视图。但是在SQLAlchemy
0.7中添加此功能非常简单(类似于我在此处给出的示例)。您只需要编写一个编译器扩展即可

CreateView
。使用此扩展名,您可以编写(假设这
t
是一个带有列的表对象
id


createview = CreateView('viewname', t.select().where(t.c.id>5))engine.execute(createview)v = Table('viewname', metadata, autoload=True)for r in engine.execute(v.select()):    print r

这是一个工作示例:

from sqlalchemy import Tablefrom sqlalchemy.ext.compiler import compilesfrom sqlalchemy.sql.expression import Executable, ClauseElementclass CreateView(Executable, ClauseElement):    def __init__(self, name, select):        self.name = name        self.select = select@compiles(CreateView)def visit_create_view(element, compiler, **kw):    return "CREATE VIEW %s AS %s" % (         element.name,         compiler.process(element.select, literal_binds=True)         )# test datafrom sqlalchemy import metaData, Column, Integerfrom sqlalchemy.engine import create_engineengine = create_engine('sqlite://')metadata = metaData(engine)t = Table('t',          metadata,          Column('id', Integer, primary_key=True),          Column('number', Integer))t.create()engine.execute(t.insert().values(id=1, number=3))engine.execute(t.insert().values(id=9, number=-3))# create viewcreateview = CreateView('viewname', t.select().where(t.c.id>5))engine.execute(createview)# reflect view and print resultv = Table('viewname', metadata, autoload=True)for r in engine.execute(v.select()):    print r

如果需要,您也可以专门学习方言,例如

@compiles(CreateView, 'sqlite')def visit_create_view(element, compiler, **kw):    return "CREATE VIEW IF NOT EXISTS %s AS %s" % (         element.name,         compiler.process(element.select, literal_binds=True)         )


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/366860.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号