我正在运行MS SQL Server,并试图在位于不同数据库(位于同一台服务器上)的两个表之间执行JOIN
。如果我使用pyodbc连接到服务器(不指定数据库),那么下面的原始SQL工作正常。SQLAlchemy:单个会话中的多个数据库(在同一台服务器上)?
SELECT * FROM DatabaseA.dbo.tableA tblA
INNER JOIN DatabaseB.dbo.tableB tblB
ON tblA.id = tblB.id
不幸的是,我似乎无法让模拟器使用SQLAlchemy工作。我已经看到了这个话题在几个地方提到了:
- Is there a way to perform a join across multiple sessions in sqlalchemy?
- Cross database join in sqlalchemy
- How do I connect to multiple databases on the same SQL Server with sqlalchemy?
- How can I use multiple databases in the same request in Cherrypy and SQLAlchemy?
大多数建议使用不同的引擎/会话,但我关键需要在数据库之间执行连接,所以我认为这种方法不会有帮助。另一个典型的建议是使用schema
参数,但这似乎不适用于我。例如以下不起作用。
engine = create_engine('mssql+pyodbc://...') #Does not specify database
metadataA = MetaData(bind=engine, schema='DatabaseA.dbo', reflect=True)
tableA = Table('tableA', metadataA, autoload=True)
metadataB = MetaData(bind=engine, schema='DatabaseB.dbo', reflect=True)
tableB = Table('tableB', metadataB, autoload=True)
我也试过一些变体,其中schema='DatabaseA'
和schema='dbo'
。在任何情况下,SQLAlchemy都会为表A和表B抛出一个NoSuchTableError
。任何想法?