[Sqlalchemy-tickets] Issue #3205: Support Table Reflection For Materialized Views (zzzeek/sqlalchem
Brought to you by:
zzzeek
|
From: cieplak <iss...@bi...> - 2014-09-18 01:37:43
|
New issue 3205: Support Table Reflection For Materialized Views https://bitbucket.org/zzzeek/sqlalchemy/issue/3205/support-table-reflection-for-materialized cieplak: Table reflection works in Postgres for regular views, but when reflecting materialized views, a sqlalchemy.exc.NoSuchTableError exception is raised. ``` from sqlalchemy import Table from sqlalchemy.ext.compiler import compiles from sqlalchemy.sql.expression import Executable, ClauseElement class 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 MATERIALIZED VIEW %s AS %s" % ( element.name, compiler.process(element.select, literal_binds=True) ) from sqlalchemy import MetaData, Column, Integer from sqlalchemy.engine import create_engine uri = 'postgresql://postgres@localhost/postgres' engine = create_engine(uri) 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)) 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 ``` |