【发布时间】:2018-12-26 05:01:06
【问题描述】:
我试图在 MSSQL 中加入 2 个数据库。
这是 SQL 查询:
SELECT od.Indice, cs.Argued
FROM HN_Ondata.dbo.ODCalls as od
JOIN HN_ADMIN.dbo.CallStatus as cs ON od.CallStatusGroup = cs.StatusGroup
我试过了:
- 创建两个引擎以自动加载表并对其进行查询。
- 创建两个引擎,打开两个会话并进行子查询。
- 创建两个引擎创建 table2 的 CTE。
- 创建一个元数据绑定到 database1 反射 table1 然后为 table2 调用反射(bind=database2)
总是以这个错误结束:
pymssql.ProgrammingError: (208, b"Invalid object name 'CallStatus'.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n")
我得到的当前解决方案是使用 session.execute 并写下原始 sql,我可以坚持使用它,但我很好奇有没有办法使用 sqlalchemy ORM 做到这一点?
编辑 1:
这是我的代码:
db1 = DatabaseManager(settings.DATABASE['hrm'], database='HN_Ondata')
db2 = DatabaseManager(settings.DATABASE['hrm'], database='HN_ADMIN')
metadata1 = MetaData(bind=db1.database)
metadata2 = MetaData(bind=db2.database)
table1 = Table('ODCalls', metadata1, autoload=True)
table2 = Table('CallStatus', metadata2, autoload=True)
with db1.session(raise_err=True) as session:
result = (
session
.query(table1.c.Indice, table2.c.Argued)
.join(table2, table1.c.CallStatusGroup == table2.c.StatusGroup)
.all()
)
谁产生了以下查询:
SELECT [ODCalls].[Indice] AS [ODCalls_Indice], [CallStatus].[Argued] AS [CallStatus_Argued]
FROM [ODCalls]
JOIN [CallStatus] ON [ODCalls].[CallStatusGroup] = [CallStatus].[StatusGroup]
【问题讨论】:
-
数据库是否在同一台服务器上?
-
是的,它们在同一台服务器上
-
在这种情况下,可能名称不正确。准确复制并粘贴完整的表格链接。或者您可能还需要为两者澄清服务器,例如 (s1.db1.dbo.t1)
-
@RyanGadsdon 不确定我应该在哪里澄清服务器,我的代码在回答中
标签: python sql-server sqlalchemy