【问题标题】:python pyodbc : how to connect to a specific instancepython pyodbc:如何连接到特定实例
【发布时间】:2014-08-26 11:46:14
【问题描述】:

我正在尝试连接到特定的 SQL Server 实例并从系统表中获取一些数据。我正在使用此代码 sn-p 进行连接:

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 实例的值。如何强制它获取特定实例的值?

【问题讨论】:

    标签: python sql pyodbc


    【解决方案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')
    

    使用 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')
    

    【讨论】:

    • 这是“旧的”,但我在这里发表评论是因为我得到了不同的结果。当我在连接字符串中尝试 192.106.0.102\instance1 时,我的登录超时,因为找不到服务器(当然我使用的值对我来说是正确的)。我一直在寻找低和高,对于我的生活,我无法找到如何连接到命名实例。连接字符串中的“INSTANCE”关键字对我也没有任何作用。
    • @Jay 请用您的代码(包括连接字符串)和错误消息提出一个新问题。上面的instance 属性无效,已被删除。
    • 谢谢 - 事实上,我已经有一个新问题了。 stackoverflow.com/questions/30363348/…
    • 我发现我必须输入一个额外的斜线来转义实例的斜线。之后工作得很好
    【解决方案2】:

    所以已经玩了几个小时了,真的很奇怪。 mmv_sat 的额外斜线对我有用,以防其他人

    Server="ipaddress...两个正斜杠...instance_name"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 2015-04-26
      • 1970-01-01
      相关资源
      最近更新 更多