【问题标题】:How to use SQLAlchemy to seamlessly access multiple databases?如何使用 SQLAlchemy 无缝访问多个数据库?
【发布时间】:2012-09-03 08:45:28
【问题描述】:

假设我为公司的不同部门创建了一个产品数据库系统。由于各种原因,每个部门都有自己的 PostgreSQL 数据库实例。数据库的模式是相同的,但其中的数据不同。对于这些系统中的每一个,都存在一个执行某些业务逻辑(无关)的 Python 应用程序。每个 Python 应用程序都通过 SQLAlchemy 访问其并且仅访问其数据库。

我想创建一个主管系统,可以访问所有这些数据库中的所有数据(通读功能)。

这是我的想法的一个例子:

我可以用 SQLAlchemy 做到这一点吗?如果是这样,解决这类问题的最佳方法是什么?

【问题讨论】:

    标签: python postgresql sqlalchemy


    【解决方案1】:

    当然你可以用 SQLAlchemy 做到这一点。

    您需要做的就是创建不同的连接引擎,每个引擎都有自己的会话生成器。 SQLAlchemy 中的任何内容都不会限制您一次只能使用一个数据库。

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

    您可以使用每个会话来运行查询,结果对象会附加到生成它们的会话,以便更改流回正确的数据库。一定要详细研究session documentation,看看如果你将一个对象从一个会话合并到另一个会话中会发生什么。

    【讨论】:

    • 然后我可以一次查询所有的数据库?
    • @AME:只要你把结果分开;不要尝试将一个会话的结果添加到另一个会话。
    猜你喜欢
    • 2019-08-26
    • 2017-11-17
    • 1970-01-01
    • 2016-10-25
    • 2015-09-27
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 2013-08-31
    相关资源
    最近更新 更多