Search code examples
pythonsqlalchemy

How can get access the object 'view' in sqlalchemy?


I add data the db.sqlite by sql script. For get access to the table:

engine = create_engine('sqlite:///' + os.path.join(APP_ROOT, 'db.sqlite'))
session = scoped_session(sessionmaker(bind=engine))
metadata = MetaData()
metadata.reflect(engine)
Base = automap_base(metadata=metadata)
Base.prepare()
session.query(Base.classes[tablename])

db.sqlite has object view "view_xxx" which created by sql script. How can I get acсess to the view?


Solution

  • engine = create_engine('sqlite:///' + 'db.sqlite')
    session = Session(engine)
    metadata = MetaData()
    metadata.reflect(engine)
    
    QUERY_TO_DB = 'SELECT * FROM property_1, property_2'
    
    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 VIEW %s AS %s" % (
            element.name,
            element.select)
    
    try:
        with engine.connect() as conn, conn:
            createview = CreateView('name_view', QUERY_TO_DB)
            conn.execute(createview)
    except Exception as e:
        print('Failed to create view: ', e)