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

问题描述 投票:0回答:8

我在 Windows 7 上使用 ActivePython 2.7.2.5。

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

代码:

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 (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)')
python sql sql-server pyodbc activepython
8个回答
31
投票

您正在使用

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

15
投票

我有同样的错误消息,在我的情况下,问题是 [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)

3
投票

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

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

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


1
投票

我今天也遇到了同样的问题。我在连接字符串中使用 localhost。通过替换“服务器名称”的 localhost 解决了该问题。我的数据库和应用程序在同一台机器上运行。

如果您没有服务器名称 转到 Sql 服务器管理工作室并执行以下查询,这将为您提供服务器名称。

SELECT @@SERVERNAME

连接字符串如下所示

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

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

print(cnxn)

我删除了“Trusted_Connection”部分,它对我有用。


0
投票

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


0
投票

首先我们需要清楚语法-

cnxn = pyodbc.connect('DRIVER={SQL server};Server=server_name;DATABASE=database_name;Port=Port_Number;UID=username;PWD=password;')

几点-

  • 驱动程序-您可以通过打印 print(pyodbc.drivers()) 进行检查,然后您可以从那里进行选择。
  • 服务器- 对于服务器名称,您可以通过运行查询来检查选择@@Servername
  • 数据库- 对于数据库,您可以签入要连接的数据库。
  • 端口- 主要用于 MS SQL Server,它是 1433。
  • UID- 考虑密钥应该是UID,不要用其他密钥更改,由于这个原因我失败了。粘贴用户名。
  • PWD-粘贴密码。

注意- 不要更改KEY,否则会出错。

Trusted_Connection=yes 用于 Windows 身份验证。


0
投票
import pyodbc

# List available ODBC drivers
drivers = pyodbc.drivers()

# Iterate through the list and print driver names
for driver in drivers:
  
print(f"Driver: {driver}")

首先,您应该列出驱动程序组件,然后在脚本中输入正确的驱动程序名称

© www.soinside.com 2019 - 2024. All rights reserved.