【发布时间】:2013-10-31 11:35:15
【问题描述】:
我正在运行 MS SQL Server,并试图在位于不同数据库(同一服务器上)的两个表之间执行 JOIN。如果我使用 pyodbc(不指定数据库)连接到服务器,则以下原始 SQL 可以正常工作。
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。有什么想法吗?
【问题讨论】:
标签: sql-server sqlalchemy