Nous avons fini par utiliser le mécanisme d'événement de sqlalchemy pour intercepter les requêtes avant qu'elles ne soient exécutées et ajouter un préfixe pour modifier le schéma :
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)
De cette façon, nous pouvons exécuter la migration d'alembic plusieurs fois, en nous assurant que le schema_name est résolu correctement à chaque fois, et que tout fonctionne correctement