请问这种情况是因为什么呀?我连接的是云服务器,并且已经开启1433端口了。
代码如下:
import pyodbc
import pandas
connection = pyodbc.connect('DRIVER={SQL Server}; SERVER=...; DATABASE=BSY; USER=sa; PASSWORD=******')
query = "select * from GROUP_SUPPLIER where GROUP_SUPPLIER_CODE like 'GYS100'"
df = pandas.read_sql_query(query, connection)
print(df)
===========================
报错信息:
Traceback (most recent call last):
File "C:\Users\cyjav\PycharmProjects\pythonProject\P29_链接SQLServer数据库.py", line 5, in <module>
connection = pyodbc.connect('DRIVER={SQL Server}; SERVER=...; DATABASE=BSY; USER=sa; PASSWORD=...')
pyodbc.Error: ('HY000', '[HY000] [Microsoft][ODBC SQL Server Driver]不能产生 SSPI 上下文 (11001) (SQLDriverConnect); [HY000] [Microsoft][ODBC SQL Server Driver]无效的连接字符串属性 (0); [HY000] [Microsoft][ODBC SQL Server Driver]不能产生 SSPI 上下文 (11001); [HY000] [Microsoft][ODBC SQL Server Driver]无效的连接字符串属性 (0)')
这个错误提示说明了在连接 SQL Server 时出现了 SSPI 上下文无法生成的问题,SSPI 是 Windows 安全支持提供程序接口,是一种安全协议,用于支持 Windows 网络验证。
这种问题通常是由于 pyodbc 模块没有在正确的安全上下文下运行所导致的。可以尝试以下几种方法来解决这个问题:
使用 Trusted_Connection=yes 参数
尝试在连接字符串中添加 Trusted_Connection=yes 参数,以使用当前 Windows 用户的安全上下文连接 SQL Server。例如:
arduino
connection = pyodbc.connect('DRIVER={SQL Server}; SERVER=...; DATABASE=BSY; Trusted_Connection=yes;')
指定用户名和密码
在连接字符串中指定用户名和密码来连接 SQL Server。例如:
arduino
connection = pyodbc.connect('DRIVER={SQL Server}; SERVER=...; DATABASE=BSY; UID=username; PWD=password;')
请确保替换连接字符串中的 username 和 password 为正确的 SQL Server 登录名和密码。
修改 Windows 注册表
如果以上方法都无法解决问题,可以尝试修改 Windows 注册表来启用 NTLMv2 会话安全。在 Windows 注册表中找到以下键:
mathematica
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa
然后添加以下两个 DWORD 值:
makefile
Name: DisableLoopbackCheck
Value: 1
Name: LmCompatibilityLevel
Value: 5
然后重新启动计算机并尝试连接 SQL Server。
希望这些方法可以帮助你解决问题