Sql server SQLAlchemy:在一个会话中有多个数据库(在同一台服务器上)?
我正在运行MS SQL Server,并尝试在位于不同数据库(在同一服务器上)中的两个表之间执行Sql server SQLAlchemy:在一个会话中有多个数据库(在同一台服务器上)?,sql-server,sqlalchemy,Sql Server,Sqlalchemy,我正在运行MS SQL Server,并尝试在位于不同数据库(在同一服务器上)中的两个表之间执行联接。如果我使用pyodbc(不指定数据库)连接到服务器,那么下面的原始SQL可以正常工作 SELECT * FROM DatabaseA.dbo.tableA tblA INNER JOIN DatabaseB.dbo.tableB tblB ON tblA.id = tblB.id 不幸的是,我似乎无法使用SQLAlchemy使模拟工作。我在几个地方看到
联接。如果我使用pyodbc(不指定数据库)连接到服务器,那么下面的原始SQL可以正常工作
SELECT * FROM DatabaseA.dbo.tableA tblA
INNER JOIN DatabaseB.dbo.tableB tblB
ON tblA.id = tblB.id
不幸的是,我似乎无法使用SQLAlchemy使模拟工作。我在几个地方看到过这个话题:
大多数人建议使用不同的引擎/会话,但我非常需要在数据库之间执行连接,因此我认为这种方法没有帮助。另一个典型的建议是使用schema
参数,但这似乎不适合我。例如,以下内容不起作用
engine=创建引擎('mssql+pyodbc://...“)#未指定数据库
metadataA=元数据(bind=engine,schema='DatabaseA.dbo',reflect=True)
tableA=Table('tableA',metadataA,autoload=True)
metadataB=元数据(bind=engine,schema='DatabaseB.dbo',reflect=True)
tableB=Table('tableB',metadataB,autoload=True)
我还尝试了schema='DatabaseA'
和schema='dbo'
中的各种方法。在所有情况下,SQLAlchemy都会对表a和表B抛出一个NoSuchTableError
。有什么想法吗?我可以在这里运行一个类似的测试,从两个远程数据库反映出来,它运行得很好
SELECT * FROM DatabaseA.dbo.tableA tblA
INNER JOIN DatabaseB.dbo.tableB tblB
ON tblA.id = tblB.id
使用最新的SQLAlchemy(建议至少使用0.8.3)
打开“echo='debug'”-它正在查找哪些表
在反射所有内容之后,metadataA.tables metadataB.tables中有什么内容
这里的外壳与SQL server上的完全相同吗?(如表a)。使用这种区分大小写的名称会导致引用它
如果可以在其中一个数据库中创建同义词,则可以将查询保留在该数据库的本地
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