示例#1
0
async def fx_sess(fx_engine):
    metadata = Base.metadata
    error = False
    async with fx_engine.begin() as conn:
        try:
            await conn.execute(text("SET CONSTRAINTS ALL IMMEDIATE;"))
        except ProgrammingError:
            error = True

        for table in reversed(metadata.sorted_tables):
            try:
                await conn.execute(
                    text("TRUNCATE TABLE {} RESTART IDENTITY CASCADE;".format(
                        table.name, )))
            except ProgrammingError:
                error = True

        try:
            await conn.execute(text("SET CONSTRAINTS ALL IMMEDIATE;"))
        except ProgrammingError:
            error = True

    if error:
        metadata = Base.metadata
        async with fx_engine.begin() as conn:
            await conn.run_sync(metadata.drop_all)
            await conn.run_sync(metadata.create_all)

    sess = make_session(bind=fx_engine)
    yield sess
    await sess.rollback()
示例#2
0
文件: conftest.py 项目: hunj/yui
def fx_sess(fx_engine):
    metadata = Base.metadata
    foreign_key_turn_off = {
        'mysql': 'SET FOREIGN_KEY_CHECKS=0;',
        'postgresql': 'SET CONSTRAINTS ALL DEFERRED;',
        'sqlite': 'PRAGMA foreign_keys = OFF;',
    }
    foreign_key_turn_on = {
        'mysql': 'SET FOREIGN_KEY_CHECKS=1;',
        'postgresql': 'SET CONSTRAINTS ALL IMMEDIATE;',
        'sqlite': 'PRAGMA foreign_keys = ON;',
    }
    truncate_query = {
        'mysql': 'TRUNCATE TABLE {};',
        'postgresql': 'TRUNCATE TABLE {} RESTART IDENTITY CASCADE;',
        'sqlite': 'DELETE FROM {};',
    }
    error = False
    with fx_engine.begin() as conn:
        try:
            conn.execute(foreign_key_turn_off[fx_engine.name])
        except ProgrammingError:
            error = True

        for table in reversed(metadata.sorted_tables):
            try:
                conn.execute(truncate_query[fx_engine.name].format(table.name))
            except ProgrammingError:
                error = True

        try:
            conn.execute(foreign_key_turn_on[fx_engine.name])
        except ProgrammingError:
            error = True

    if error:
        metadata = Base.metadata
        metadata.drop_all(bind=fx_engine)
        metadata.create_all(bind=fx_engine)

    sess = make_session(bind=fx_engine)
    yield sess
    sess.rollback()