【问题标题】:Connecting to local SQL Server instance连接到本地 SQL Server 实例
【发布时间】:2015-06-24 20:02:43
【问题描述】:

我正在尝试连接到在我的机器上运行的本地 SQL Server 实例。我可以从我们的服务器使用此代码连接到本地实例,但它在我的本地计算机上失败。

我在 SQL Server 配置中启用了命名管道和所有 ip。

我使用的代码如下:

from pymssql import connect
server = r'.\SQLEXPRESS2014' # I've also tried MORGANT-PC\SQLEXPRESS and SQLEXPRESS2014
username = 'MyUserName'
password = 'MyPassword'
master_database_name = 'SuperSecretDatabase'
port = 5000
server_args = {'host': server, 'user': username, 'password': password,
               'database': master_database_name, 'port': port} # I've tried having the first key be both host and server, because pymssql's docs are unclear on the difference.
master_database = connect(**server_args)

如果我使用实例名称,我会收到此错误:

pymssql.InterfaceError: Connection to the database failed for an unknown reason.

我将端口设置为 5000,以便我可以尝试使用

连接它
server = 127.0.0.1
port = 5000

失败并显示略有不同的错误消息:

pymssql.OperationalError: (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist\nNet-Lib error during Unknown error (10035)\n')

我在这里阅读了很多关于 SO 的答案,其中大多数似乎表明这是 FreeTDS 的问题,但我使用的是 Windows 8.1,所以我没有 FreeTDS。

我尝试使用主机\实例名称与sqlcmd 连接,并且效果很好。它也适用于 SSMS。

我尝试将.\SQLEXPRESS2014 传递给pymssql.connect() 中的hostserver 参数,但它们都因上述相同的错误而失败。

我曾短暂尝试过使用adodbapi,但得到的错误消息完全相同。

【问题讨论】:

  • 您的本地主机是命名实例吗?您的连接正在连接到一个命名实例。
  • 是的。我不确定您甚至可以将 server 2014 安装为非命名实例。如果您查看问题,我也尝试使用 ip/port 连接。

标签: python sql-server windows python-3.x sql-server-2014


【解决方案1】:

解决方案最终是多种事物的组合。

  1. 我需要禁用除 127.0.0.1 之外的所有 IP。
  2. 我需要使用以下文本创建 C:\freetds.conf:

    [global] port = 1433 tds version = 7.0

  3. 我需要将我的 SQL 实例登录帐户更改为 LocalSystem。

【讨论】:

    【解决方案2】:

    是的,默认值为 1433 秒。

    这对我来说很好用:

    library(RODBC)
    dbconnection <- odbcDriverConnect("Driver=ODBC Driver 11 for SQL Server;Server=server_name; Database=db_name;Uid=; Pwd=; trusted_connection=yes")
    initdata <- sqlQuery(dbconnection,paste("select * from MyTable;"))
    odbcClose(channel)
    

    【讨论】:

      【解决方案3】:

      尝试连接默认的 SQL 服务器端口,即 1433,而不是 5000。 并检查您是否可以使用 SQL mgmt studio 连接到正确的实例。

      【讨论】:

      • 这两种方法我都试过了,效果很好。 SSMS 甚至可以使用端口 5000。
      【解决方案4】:

      我遇到了类似的问题,出现以下错误:

      _mssql.MSSQLDatabaseException: (18456, b"Login failed for user
      'script_svc'.DB-Lib error message 20018, severity 14:\nGeneral SQL Server
      error: Check messages from the SQL Server\nDB-Lib error message 20002,
      severity 9:\nAdaptive Server connection failed\n")
      

      我建立的用户是机器上的本地用户。

      我的解决方案是将“.\”放在用户名前面,然后它将其识别为本地用户并允许查询工作。

      你的结果可能会有所不同..但我想我会提到它。

      【讨论】:

        【解决方案5】:

        您是否尝试过改用pyodbc

        import pyodbc
        cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER=SERVERNAME;DATABASE=testdb;UID=me;PWD=pass')
        cursor = cnxn.cursor()
        cursor.execute("select user_id, user_name from users")
        rows = cursor.fetchall()
        for row in rows:
            print row.user_id, row.user_name
        

        不要忘记将 ODBC 驱动程序添加到您的 Windows。转到:控制面板 > 系统和安全 > 管理工具 > ODBC 数据源

        32 位或 64 位版本,具体取决于您的计算机。

        然后单击系统 DNS 文件。如果您没有看到任何 MySQL 驱动程序,您必须单击添加。它会弹出一个列表,从该列表中选择 MySQL 驱动程序。

        对我来说,它是ODBC Driver 13 for SQL Server。点击完成。完成此操作后,您必须将代码中的连接线更改为您刚刚填写的相应驱动程序。

        来源:pyodbc + MySQL + Windows: Data source name not found and no default driver specified

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-16
          • 2010-09-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多