我正在运行MS SQL Server,并尝试在位于不同数据库(位于同一服务器上)中的两个表之间执行JOIN
。如果我使用pyodbc连接服务器(未指定数据库),则以下原始SQL可以正常工作。
SELECT * FROM DatabaseA.dbo.tableA tblA
INNER JOIN DatabaseB.dbo.tableB tblB
ON tblA.id = tblB.id
不幸的是,我似乎无法使用SQLAlchemy使模拟工作。我已经在几个地方看到了这个话题:
多数建议使用不同的引擎/ session ,但是我非常需要在数据库之间执行联接,因此我认为这种方法不会有帮助。另一个典型的建议是使用
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
。有什么想法吗? 最佳答案
如果可以在其中一个数据库中创建同义词,则可以将查询保留在该单个数据库本地。
USE DatabaseB;
GO
CREATE SYNONYM dbo.DbA_TblA FOR DatabaseA.dbo.tableA;
GO
您的查询将变为:
SELECT * FROM dbo.DbA_TblA tblA
INNER JOIN dbo.tableB tblB
ON tblA.id = tblB.id
关于sql-server - SQLAlchemy:单个 session 中有多个数据库(在同一服务器上)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19520570/