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()
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()