使用sqlalchemy orm从查询创建临时表

使用sqlalchemy orm从查询创建临时表,第1张

使用sqlalchemy orm从查询创建临时表

它不完全是ORM,但为了最初创建表,我将克隆表结构(请参见

cloneTable
下面的示例)。为了复制数据,我将使用InsertFromSelect示例。

编辑: 自版本0.8.3起,SqlAlchemy支持
开箱即用的Insert.from_select()
。因此,下面的示例中的InsertFromSelect类和相应的访问者可以直接替换,不再需要。由于历史原因,我保留了原始示例。

这是一个有效的例子

from sqlalchemy import Tablefrom sqlalchemy.ext.compiler import compilesfrom sqlalchemy.sql.expression import Updatebaseclass InsertFromSelect(Updatebase):    def __init__(self, table, select):        self.table = table        self.select = select@compiles(InsertFromSelect)def visit_insert_from_select(element, compiler, **kw):    return "INSERT INTO %s %s" % (        compiler.process(element.table, asfrom=True),        compiler.process(element.select)    )def cloneTable(name, table, metadata):    cols = [c.copy() for c in table.columns]    constraints = [c.copy() for c in table.constraints]    return Table(name, metadata, *(cols + constraints))# test datafrom sqlalchemy import metaData, Column, Integerfrom sqlalchemy.engine import create_enginee = create_engine('sqlite://')m = metaData(e)t = Table('t', m, Column('id', Integer, primary_key=True),          Column('number', Integer))t.create()e.execute(t.insert().values(id=1, number=3))e.execute(t.insert().values(id=9, number=-3))# create temp tabletemp = cloneTable('temp', t, m)temp.create()# copy datains = InsertFromSelect(temp, t.select().where(t.c.id>5))e.execute(ins)# print resultfor r in e.execute(temp.select()):    print(r)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5646082.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存