一尘不染

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

sql

我试图连接到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实例的值。如何强制它获取特定实例的值?


阅读 176

收藏
2021-03-10

共1个答案

一尘不染

验证

首先,您要同时提供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')

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

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')
2021-03-10