【发布时间】:2019-06-11 16:58:02
【问题描述】:
我在 postgres 服务器中有两个数据库,分别命名为 dispatch 和 drivers,并像这样配置它:
engines = { 'drivers':create_engine('postgres://postgres:admin@localhost:5432/drivers'), 'dispatch':create_engine('postgres://postgres:admin@localhost:5432/dispatch')
}
而且我还有 routingSession 类,它基于在运行时传递给查询的对象,在特定数据库中执行查询并提取结果
class RoutingSession(Session):
def get_bind(self, mapper=None, clause=None):
if mapper and issubclass(mapper.class_, drivers):
return engines['drivers']
elif mapper and issubclass(mapper.class_, dispatch):
return engines['dispatch']
所以现在我可以像这样在数据库表上发布查询:
Session = sessionmaker(class_=RoutingSession)
session=Session()
res=session.query(drivers).all()
但我面临的问题是我需要在我的两个表(即驱动程序和调度)之间进行结果聚合,在处理同一个数据库和多个模式时我能够做到这一点:
result=session.query(drivers,dispatch).filter(drivers.id==dispatch.id).all()
但当我尝试在不同的数据库上执行此操作时失败。请建议我如何实现这一点。
【问题讨论】:
-
你的问题是什么?
-
更新了..请检查
-
虽然感觉您应该使用架构,但正如您所指出的,如果您必须有单独的数据库,请尝试阅读外国数据包装器或 dblink。
-
@IljaEverilä 我能够在同一个数据库中使用模式来实现这一点,想测试我们是否可以通过多个数据库实现相同的目标。对于多个数据库,我也可以向两个数据库发起查询,但是不知道如何将两个不同查询的结果聚合在一起。
-
似乎是重复的帖子stackoverflow.com/questions/44564369/… ..@IljaEverilä 您在此链接中发布的解决方案也适用于 postgres。
标签: python-3.x postgresql orm sqlalchemy