python pyodbc:如何连接到特定实例

21 投票
1 回答
95774 浏览
提问于 2025-04-18 18:34

我正在尝试连接到一个特定的SQL Server实例,并从系统表中获取一些数据。我使用了以下代码片段来连接:

connSqlServer = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=192.106.0.102;DATABASE=master;INSTANCE=instance1;UID=sql2008;PWD=password123;Trusted_Connection=yes')
...
cursorObj.execute("select * from sys.dm_os_sys_info")
row = cursorObj.fetchone()
print("rows from table ",row) 

但是我只得到了默认实例的值,而无法获取'instance1'的值。所以在'INSTANCE=instance1'中给出实例名称似乎没有任何效果。即使不写这个(我试过写'PORT=1443',这是实例的端口号),我仍然只得到了默认SQL Server实例的值。请问如何强制它获取特定实例的值呢?

1 个回答

37

身份验证

首先,你提供了 uid/pwd(SQL Server身份验证)和 trusted_connection(Windows身份验证)。你只能选择其中一种,不能同时使用。接下来的例子我将假设使用SQL Server身份验证。

连接字符串

使用实例名称连接到命名实例 instance1

connSqlServer = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=192.106.0.102\instance1;DATABASE=master;UID=sql2008;PWD=password123')

使用TCP/IP和端口号 1443 连接到命名实例:

connSqlServer = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=192.106.0.102,1443;DATABASE=master;UID=sql2008;PWD=password123')

关键词替代

pyodbc.connect() 支持关键词,我觉得这样更容易阅读,而且如果你使用变量来设置连接字符串的属性,就不需要进行字符串格式化:

命名实例:

connSqlServer = pyodbc.connect(driver='{SQL Server Native Client 10.0}',
                               server='192.106.0.102\instance1',
                               database='master',
                               uid='sql2008',pwd='password123')

TCP/IP端口:

connSqlServer = pyodbc.connect(driver='{SQL Server Native Client 10.0}',
                               server='192.106.0.102,1443',
                               database='master',
                               uid='sql2008',pwd='password123')

撰写回答