Sql server SQLAlchemy:在一个会话中有多个数据库(在同一台服务器上)?

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使模拟工作。我在几个地方看到

我正在运行MS SQL Server,并尝试在位于不同数据库(在同一服务器上)中的两个表之间执行
联接。如果我使用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