【发布时间】:2019-10-29 20:32:15
【问题描述】:
我目前可以连接到我的 SQL Server 并直接查询任何我想查询的数据库。
问题是当我想查询链接服务器时。我无法在connect() 方法中直接引用链接服务器名称,我必须先连接到本地数据库,然后对链接服务器运行OPENQUERY()。
这看起来像是一个奇怪的工作。有没有办法直接查询链接服务器(根据我的研究,您不能直接连接到链接服务器),或者至少在不指定数据库的情况下连接到服务器,然后我可以在其中运行OPENQUERY()无需先连接到数据库的任何事情?
我目前要做的事情的例子:
import pyodbc
ex_value = "SELECT * FROM OPENQUERY(LinkedServerName,'SELECT * FROM LinkedServerName.SomeTable')"
# I have to connect to some local database on the server and cannot connect to linked server initially.
odbc_driver, server, db = '{ODBC Driver 17 for SQL Server}', 'MyServerName', 'LocalDatabase'
with pyodbc.connect(driver=odbc_driver, host=server, database=db, trusted_connection='yes') as conn:
conn.autocommit = False
cursor = conn.cursor()
cursor.execute(ex_value)
tables = cursor.fetchall()
for row in tables:
print('Row: {}'.format(row))
cursor.close()
【问题讨论】:
-
链接服务器不是数据库或sql server。它是一个服务器对象,允许您查询远程数据库。所以是的,你正在做的就是你必须做的。或者,当这是您想要的唯一数据时,直接连接到远程服务器。直接到源而不是通过链接服务器的额外跃点性能会更好。
-
@SeanLange 我无法直接连接到链接服务器,因为我正在构建一个供多人使用的应用程序,并且我们不想管理 100 多个用户凭据。我们在 SQL Server 上有与 Windows 身份验证相关的机器 ID,因此我们只需要管理 SQL Server 中的用户组。如果我现在正在做的是我唯一的选择,我想那很好。我将创建一个虚拟数据库,其中没有任何内容可以连接。
-
考虑到这种情况,这可能是最好的做法。
-
@SeanLange 我认为可能是这样,但人们可能希望有一个更好的解决方案:D。感谢您的信息。
标签: python sql-server odbc pyodbc