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

use*_*140 9 sql-server sqlalchemy

我正在运行MS SQL Server,并且正在尝试JOIN在位于不同数据库(在同一服务器上)的两个表之间执行.如果我使用pyodbc连接到服务器(没有指定数据库),那么以下原始SQL工作正常.

SELECT * FROM DatabaseA.dbo.tableA tblA 
         INNER JOIN DatabaseB.dbo.tableB tblB 
         ON tblA.id = tblB.id 
Run Code Online (Sandbox Code Playgroud)

不幸的是,我似乎无法使用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)
Run Code Online (Sandbox Code Playgroud)

我也尝试过各种各样的schema='DatabaseA'schema='dbo'.在所有情况下,SQLAlchemy都会NoSuchTableError为表A和B 抛出一个.任何想法?

zzz*_*eek 0

我可以在这里运行这样的测试,从两个远程数据库反映,并且效果很好。

  1. 使用最新的 SQLAlchemy(至少推荐 0.8.3)?

  2. 打开“echo='debug'” - 它找到了哪些表?

  3. 反思之后,metadataA.tables、metadataB.tables 中存在什么?

  4. 这里的外壳与 SQL Server 上的外壳完全相同吗?(例如表A)。使用像这样区分大小写的名称将导致它被引用。