Това, което в крайна сметка направихме, беше да използваме механизма за събития на sqlalchemy, за да уловим заявките, преди да бъдат изпълнени, и да добавим префикс, за да променим схемата:
def before_cursor_execute(conn, cursor, statement, parameters, context, executemany):
schema_name = <Logic to resolve schema name>
statement = "SET search_path TO '%s'; %s" % (schema_name, statement)
return statement, parameters
......
(later in the code)
listen(Engine, 'before_cursor_execute', before_cursor_execute, retval=True)
По този начин можем да стартираме migrate на alembic няколко пъти, като се уверим, че schema_name се разрешава правилно всеки път и всичко работи гладко