2012-09-10 25 views
10

比方说,我为我公司的不同部门创建了一个产品数据库系统。由于各种原因,每个部门都有自己的PostgreSQL数据库实例。数据库的模式是相同的,但是它们中的数据不是。对于这些系统中的每一个,存在一个执行一些业务逻辑(不相关)的Python应用程序。每个Python应用程序都通过SQLAlchemy访问它的数据库。如何使用SQLAlchemy无缝访问多个数据库?

我想创建一个可以访问所有这些数据库中的所有数据的Supervisior-System(读写功能)。

这里是什么,我想一个例子: enter image description here

我可以做到这一点SQLAlchemy的?如果是这样,那么这种问题最好的办法是什么?

回答

10

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

所有你需要做的就是创建不同的连接引擎,每个连接引擎都有自己的会话制作者。 SQLAlchemy中一次只限制一个数据库。

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

您可以使用每个会话运行查询,结果对象连接到产生它们,以便更改回流到正确的数据库会话。例如,详细研究session documentation,看看如果将一个对象从一个会话合并到另一个会话会发生什么情况。

+0

然后我可以一次查询所有的dbs? – AME

+1

@AME:只要你保持独立的结果;不要尝试将结果从一个会话添加到另一个会话。 –