我在Windows 7上使用ActivePython 2.7.2.5。
在尝试使用以下代码使用 pyodbc 模块连接到 sql 服务器数据库时,我收到了后续的回溯。对我做错了什么有什么想法吗?
法典:
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)')
您正在使用 '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)
我有相同的错误消息,就我而言,问题是 [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)
其他原因,我遇到了此错误。
这是因为我的服务器除了地址之外还有一个"端口"。
我可以通过将以下值分配给连接字符串的"服务器"参数来解决此问题。
"...;Server=<server_name>,<port#>;..."
请注意,它是一个"逗号"而不是"冒号"/"句点"
我今天遇到了同样的问题。我在连接字符串中使用了本地主机。通过替换本地主机的"服务器名称"来解决此问题。我的数据库和应用程序在同一台机器上运行。
如果您没有服务器名称转到 Sql Server 管理工作室并执行以下查询,该查询将为您提供服务器名称。
SELECT @@SERVERNAME
连接字符串如下所示
conn = pyodbc.connect('Driver={SQL Server};'
'Server=myServerName;'
'Database=mydb;'
'Trusted_Connection=yes;')
cnxn = pyodbc.connect(driver='{SQL Server}', host=server, database=db1,
user=uname, password=pword)
print(cnxn)
我删除了"Trusted_Connection"部分,它对我有用。
这两种方法都存在不同的安全风险。 如果使用 Sql Server 身份验证,则会在代码中公开您的用户 ID/密码。 但至少您可以使用相同的凭据进行处理。 如果使用 Windows 身份验证,则必须确保在 Sql 服务器中设置所有可能的用户具有正确的权限。 使用 Sql 身份验证,您可以只设置一个用户,但多个人可以明智地使用该 Sql 用户权限。
首先我们需要清楚语法-
cnxn = pyodbc.connect('DRIVER={SQL server};Server=server_name;DATABASE=database_name;Port=Port_Number;UID=username;PWD=password;')
几点——
- 驱动程序 - 您可以通过打印打印(pyodbc.drivers())进行检查,然后从那里进行选择。
- 服务器 - 对于服务器名称,您可以通过运行查询选择@@Servername
- 数据库 - 对于数据库,您可以签入要连接的数据库。
- 端口 - 主要用于MS SQL Server,它将是1433。
- UID - 考虑密钥应该是 UID,不要与其他密钥更改,由于这个原因我得到了失败。粘贴用户名。
- PWD - 粘贴密码。
注意 - 不要更改 KEY,否则会出现错误。
Trusted_Connection=yes 用于 Windows 身份验证。