Ejemplo n.º 1
0
def create_view(name, selectable):
    """Creates a view.

    This is an adaptation from sqlalchemy_utils.view. See
     `the test on sqlalchemy-utils <https://github.com/kvesteri/
    sqlalchemy-utils/blob/master/tests/test_views.py>`_ for an
    example on how to use.
    """
    table = view.create_table_from_selectable(name, selectable)

    # We need to ensure views are created / destroyed before / after
    # SchemaSQLAlchemy's listeners execute
    # That is why insert=True in 'after_create'
    event.listen(db.metadata,
                 'after_create',
                 view.CreateView(name, selectable),
                 insert=True)
    event.listen(db.metadata, 'before_drop', view.DropView(name))
    return table
Ejemplo n.º 2
0
def create_view(
    name,
    selectable,
    metadata,
    or_replace=False,
    materialized=False,
    cascade_on_drop=True,
):
    table = create_table_from_selectable(
        name=name, selectable=selectable, metadata=None
    )
    CV = CreateView(name, selectable, or_replace, materialized)
    sa.event.listen(metadata, "after_create", CV)

    @sa.event.listens_for(metadata, "after_create")
    def create_indexes(target, connection, **kw):
        for idx in table.indexes:
            idx.create(connection)

    sa.event.listen(metadata, "before_drop", DropView(name, cascade=cascade_on_drop))
    return table