Как использовать SQLAlchemy для беспрепятственного доступа к нескольким базам данных?

Допустим, я создал систему баз данных продуктов для разных отделов моей компании. Каждый отдел имеет свой собственный экземпляр PostgreSQL-databse по различным причинам. Схемы баз данных одинаковы, однако данных в них нет. Для каждой из этих систем существует приложение Python, которое выполняет некоторую бизнес-логику (не имеет значения). Каждое приложение Python обращается к своим и только к своим базам данных через SQLAlchemy.

Я хочу создать Supervisior-System, которая может получить доступ ко всем данным во всех этих базах данных (сквозная функциональность).

Вот пример того, о чем я думаю: enter image description here

Могу ли я сделать это с помощью SQLAlchemy? Если да, то каков наилучший подход для такого рода проблем?

Ответ 1

Конечно, вы можете сделать это с помощью SQLAlchemy.

Все, что вам нужно сделать, это создать разные механизмы подключения, каждый со своим собственным создателем сеанса. Ничто в SQLAlchemy не ограничивает вас только одной базой данных за раз.

engines = []
sessions = []
for dbconninfo in databases:
    engine = create_engine(dbconninfo)
    engines.append(engine)
    sessions.append(sessionmaker(bind=engine)())

Вы можете использовать каждый сеанс для запуска запросов, объекты результата присоединяются к сеансу, который их создал, чтобы изменения возвращались к правильной базе данных. Подробно изучите документацию по сеансу, чтобы узнать, что произойдет, если вы хотите объединить объект из одного сеанса в другой, например.