sqlalchemy creating VIEW with ORM

前端 未结 1 1783
刺人心
刺人心 2020-12-30 03:37

I created the following ORM:

from sqlalchemy import Column, Integer, String, UniqueConstraint
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchem         


        
1条回答
  •  伪装坚强ぢ
    2020-12-30 04:20

    the library sqlalchemy-utils now includes functionality for creating views, and it associates the view with sqlalchemy's metadata so that it is possible to create the view using Base.metadata.create_all

    example:

    # installation: pip install sqlalchemy-utils
    from sqlalchemy_utils import create_view
    from sqlalchemy import select, func
    
    # engine Base & Table declaration elided for brevity
    
    stmt = select([
        TableB.id.label('table_b_id'),
        TableB.coupon_code,
        TableB.number_of_rebought_items,
        TableA.id.label('table_a_action_id'),
        TableA.time,
        TableA.parameters
    ]).select_from(TableB.__table__.outerjoin(TableA, TableB.generate_action == TableA.id))
    
    # attaches the view to the metadata using the select statement
    view = create_view('my_view', stmt, Base.metadata)
    
    # provides an ORM interface to the view
    class MyView(Base):
        __table__ = view
    
    # will create all tables & views defined with ``create_view``
    Base.metadata.create_all()
    
    # At this point running the following yields 0, as expected,
    # indicating that the view has been constructed on the server 
    engine.execute(select([func.count('*')], from_obj=MyView)).scalar() 
    

    0 讨论(0)
提交回复
热议问题