连接到本地SQL Server实例

时间:2015-06-24 20:02:43

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

我尝试连接到我的计算机上运行的SQL Server的本地实例。我能够使用来自我们服务器的代码连接到本地实例,但它在本地计算机上失败。

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

我使用的代码如下:

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传递给host中的serverpymssql.connect()参数,并且它们都会因上述错误而失败。

我曾尝试使用adodbapi,但我收到了完全相同的错误消息。

5 个答案:

答案 0 :(得分:1)

解决方案最终成为了各种事物的组合。

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

    [global] port = 1433 tds version = 7.0

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

答案 1 :(得分:1)

是的,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)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

_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")

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

对我来说,解决方案是把#34;。\&#34;在用户名前面,然后将其识别为本地用户并允许查询工作。

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

答案 4 :(得分:0)

您是否尝试过使用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。转到:控制面板&gt;系统和安全&gt;管理工具&gt; 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