Pyodbc连接SQL Server失败:用户信息正确但无法连接
解决pyodbc连接SQL Server登录失败及无效连接属性问题
核心问题1:连接串包含pyodbc不支持的参数
报错中的Invalid connection string attribute是关键提示——你用的pool_pre_ping和pool_recycle是SQLAlchemy专属参数,pyodbc原生的connect()方法不支持这些属性,这会导致连接串解析失败,进而触发登录失败的误报。
修改后的连接串
删掉这两个无效参数,同时注意转义Server地址中的反斜杠,调整后的代码:
conn = pyodbc.connect(f'Driver={driver_name}; ' 'Server=192.168.1.x\\SERVER-NAME\\SQLEXPRESS,1433;' 'Database=Warehouse;' 'Integrated Security=False;' 'Trusted_Connection=no;' 'UID=Warehouse;' 'PWD=passwordhere;', timeout=1 )
核心问题2:用户可能因多次失败登录被锁定
服务器离线期间你的应用多次重试登录,会触发SQL Server的登录失败锁定策略(默认通过Windows组策略或SQL Server安全策略配置)。
检查并解锁用户
在SSMS中执行以下SQL查询,确认用户状态:
SELECT name, is_disabled, lockout_time FROM sys.sql_logins WHERE name = 'Warehouse';
- 如果
lockout_time不为NULL或is_disabled=1,说明用户被锁定,执行解锁命令:
ALTER LOGIN Warehouse UNLOCK;
- 若解锁后仍有问题,可临时关闭登录策略再开启(按需操作):
ALTER LOGIN Warehouse WITH CHECK_POLICY = OFF; ALTER LOGIN Warehouse WITH CHECK_POLICY = ON;
额外排查项
- 确认身份验证模式:右键SQL Server实例→属性→安全性,确认已启用「SQL Server和Windows身份验证模式」,避免服务器重启后配置重置。
- 验证端口与实例名:确保
192.168.1.x\\SERVER-NAME\\SQLEXPRESS,1433中的实例名、端口正确,服务器重启后SQL Server服务是否正常监听1433端口。
内容的提问来源于stack exchange,提问作者Lzypenguin
相关产品推荐
相关产品推荐

