在Windows 7上无法使用pyodbc建立与sql-server的连接

时间:2013-09-17 21:59:18

标签: python sql sql-server pyodbc activepython

我在Windows 7上使用ActivePython 2.7.2.5。

尝试使用以下代码使用pyodbc模块连接到sql-server数据库时,我会收到后续的Traceback。关于我做错了什么想法?

CODE:

import pyodbc
driver = 'SQL Server'
server = '**server-name**'
db1 = 'CorpApps'
tcon = 'yes'
uname = 'jnichol3'
pword = '**my-password**'

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes')
cursor = cnxn.cursor()
cursor.execute("select * from appaudit_q32013")
rows = cursor.fetchall()
for row in rows:
    print row

TRACEBACK:

Traceback (most recent call last):
  File "pyodbc_test.py", line 9, in <module>
    cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes')
pyodbc.Error: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect); [01000] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). (53)')

5 个答案:

答案 0 :(得分:10)

您正在使用'DRIVER={SQL Server};SERVER=server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes'的连接字符串,您正在尝试连接到名为server的服务器,名为db1的数据库等。它不使用你之前设定的变量,它们没有被使用。

可以将连接字符串参数作为关键字参数传递给connect函数,因此您可以使用:

cnxn = pyodbc.connect(driver='{SQL Server}', host=server, database=db1,
                      trusted_connection=tcon, user=uname, password=pword)

答案 1 :(得分:5)

我有相同的错误消息,在我的情况下,问题是我的服务器上禁用的[SQL Server]驱动程序需要TLS 1.0。更改为较新版本的SNAC,SQL Server Native Client 11.0解决了问题。

所以我的连接字符串如下:

cnxn = pyodbc.connect(driver='{SQL Server Native Client 11.0}', 
                      host=server, database=db1, trusted_connection=tcon,
                      user=uname, password=pword)

答案 2 :(得分:0)

两种方法都存在不同的安全风险。如果使用Sql Server身份验证,则在代码中公开您的用户标识/密码。但至少你使用相同的凭据进行处理。如果使用Windows身份验证,则必须确保在Sql server中使用正确的权限设置所有可能的用户。使用Sql身份验证,您只需设置一个用户,但多人可以使用该Sql用户权限。

答案 3 :(得分:0)

由于其他原因,我遇到了这个错误 这是因为我的服务器除了地址之外还有一个“端口” 我可以通过将以下值分配给连接字符串的“Server”参数来解决这个问题。

"...;Server=<server_name>,<port#>;..."

请注意,它是'逗号'而不是'冒号'/'期间'

答案 4 :(得分:0)

我今天遇到了同样的问题。我在连接字符串中使用 localhost。通过替换 localhost woth 'server name' 解决了这个问题。我的数据库和应用程序在同一台机器上运行。

如果您没有服务器名称 转到Sql server management studio并执行以下查询,这将为您提供服务器名称。

SELECT @@SERVERNAME

连接字符串如下

conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=myServerName;'
                      'Database=mydb;'
                      'Trusted_Connection=yes;')