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

Python 无法在Windows 7上使用pyodbc建立与sql server的连接,python,sql,sql-server,pyodbc,activepython,Python,Sql,Sql Server,Pyodbc,Activepython,我正在Windows7上使用ActivePython 2.7.2.5 在尝试使用以下代码通过pyodbc模块连接到sql server数据库时,我收到了后续的回溯。你知道我做错了什么吗 代码: 回溯: Traceback (most recent call last): File "pyodbc_test.py", line 9, in <module> cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=server;DA

我正在Windows7上使用ActivePython 2.7.2.5

在尝试使用以下代码通过pyodbc模块连接到sql server数据库时,我收到了后续的回溯。你知道我做错了什么吗

代码:

回溯:

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)')
回溯(最近一次呼叫最后一次):
文件“pyodbc_test.py”,第9行,在
cnxn=pyodbc.connect('DRIVER={sqlserver};Server=Server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes')
pyodbc.Error:('08001','[08001][Microsoft][ODBC SQL Server驱动程序][DBNETLIB]SQL Server不存在或访问被拒绝。(17)(SQLDriverConnect);[01000][Microsoft][ODBC SQL Server驱动程序][DBNETLIB]连接打开(Connect())(53)'

您使用的连接字符串是
'DRIVER={sqlserver};服务器=服务器;数据库=db1;UID=uname;PWD=pword;Trusted_Connection=yes'
,您正在尝试连接到名为
server
的服务器、名为
db1
的数据库等。它不使用您以前设置的变量,不使用它们

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

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

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

我收到了相同的错误消息,在我的情况下,问题是[Sql Server]驱动程序所需的TLS 1.0在我的服务器上被禁用。更改为较新版本的SNAC,
SQLServer本机客户端11.0
修复了该问题

因此,我的连接字符串如下所示:

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

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

"...;Server=<server_name>,<port#>;..."
“…;服务器=,;…”

请注意,它是一个“逗号”而不是“冒号”/“句号”

我今天也有同样的问题。我在connectionstring中使用了localhost。通过使用“服务器名称”替换localhost WO,解决了此问题,。我的数据库和应用程序在同一台机器上运行

如果您没有服务器名称 转到SQLServerManagementStudio并执行下面的查询,该查询将为您提供服务器名称

SELECT @@SERVERNAME
连接字符串如下所示

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

成功了!非常感谢。@JamesNicholson您还需要从连接字符串中删除
trusted\u connection
属性,因为您提供了用户名和密码。您可以使用Windows身份验证(
trusted_connection
属性)或SQL Server身份验证(
user
password
属性),但不能同时使用这两种身份验证。在我的测试中,如果两者都提供,连接默认为Windows身份验证。@beargle您能提交一个提供代码示例的答案吗?了解在这两种情况下如何构造连接字符串将非常有帮助。谢谢。@JamesNicholson请看下面显示的
pyodbc.connect
SQL和Windows身份验证示例。@beargle谢谢。使用其中一种是否存在安全风险?在我的情况下,以下司机姓名对我很有用。”SQL Server本机客户端11.0”和“SQL Server的ODBC驱动程序11”@HammadHassan:当我使用pyodbc.datasources()时,它们没有列为数据源。你知道如何导入/添加数据源吗?@MSIS据我所知,你必须安装一些东西才能使ODBC/SQL Server。。。司机可用。
conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=myServerName;'
                      'Database=mydb;'
                      'Trusted_Connection=yes;')