我正在运行 MS SQL Server,并试图在JOIN
位于不同数据库(在同一台服务器上)的两个表之间执行。如果我使用 pyodbc(不指定数据库)连接到服务器,则以下原始 SQL 可以正常工作。
SELECT * FROM DatabaseA.dbo.tableA tblA
INNER JOIN DatabaseB.dbo.tableB tblB
ON tblA.id = tblB.id
不幸的是,我似乎无法使用 SQLAlchemy 来模拟工作。我在几个地方看到过这个话题:
- 有没有办法在 sqlalchemy 中跨多个会话执行连接?
- sqlalchemy 中的跨数据库连接
- 如何使用 sqlalchemy 连接到同一 SQL Server 上的多个数据库?
- 如何在 Cherrypy 和 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)
我也尝试过 whereschema='DatabaseA'
和schema='dbo'
. 在所有情况下,SQLAlchemyNoSuchTableError
都会为表 A 和 B 抛出一个。有什么想法吗?