使用Flask和pyodbc连接数据库时出现登录超时错误如何解决
这个HYT00登录超时错误是SQLAlchemy通过pyodbc驱动连接SQL Server时,无法在指定超时时间内和数据库建立连接导致的,属于配置、服务或网络层面的故障。
- 数据库连接URI配置错误:比如示例中写的
./作为数据库地址、用户名、密码、数据库名填写错误,或者实例名未指定 - 本地SQL Server服务未启动,或者默认1433端口未开启监听
- ODBC Driver 17 for SQL Server未正确安装,或版本与系统架构不匹配
- 系统防火墙拦截了程序到SQL Server端口的连接请求
- SQL Server默认未启用TCP/IP连接协议,无法通过网络方式连接
- 若使用SQL Server Express版本,默认实例名为
SQLEXPRESS,未在连接地址中指定会导致连接失败 - 代码中
SQLALCHEMY_TRACK_MODIFICATIONS配置项的值写为大写FALSE,Python中布尔值为小写开头的False,未定义变量也可能引发连锁连接异常
- 修正数据库连接URI配置
正确的连接URI格式分两种场景:
- 使用SQL Server账号密码验证:
mssql+pyodbc://<你的用户名>:<你的密码>@<数据库地址>\<可选实例名>/<数据库名>?driver=ODBC+Driver+17+for+SQL+Server
比如本地安装SQL Server Express版,账号sa、密码123456、数据库名为test的配置示例:mssql+pyodbc://sa:123456@localhost\SQLEXPRESS/test?driver=ODBC+Driver+17+for+SQL+Server
- 使用Windows身份验证(无需账号密码):
mssql+pyodbc://@localhost\SQLEXPRESS/test?driver=ODBC+Driver+17+for+SQL+Server&Trusted_Connection=yes
同时将代码中的FALSE改为False。
检查SQL Server服务状态
Windows系统按下Win+R输入services.msc打开服务管理器,找到SQL Server(你的实例名)服务,确认状态为正在运行,未运行则手动启动。启用SQL Server TCP/IP协议
打开SQL Server配置管理器,依次进入SQL Server网络配置-> 对应实例的协议设置,右键TCP/IP选择启用,进入TCP/IP属性的IP地址页,拉到最下方将TCP端口设置为1433,保存后重启SQL Server服务。验证ODBC驱动可用性
按下Win+R输入odbcad32.exe(64位系统进入C:\Windows\System32\odbcad32.exe)打开ODBC数据源管理器,新建用户DSN,选择ODBC Driver 17 for SQL Server,按照向导填写数据库信息测试连接,若此处无法连接,先重新安装对应版本的ODBC驱动。排查防火墙拦截
临时关闭系统防火墙测试连接,若关闭后可正常连接,在防火墙规则中添加1433端口的入站、出站允许规则即可。延长连接超时时间
如果是网络延迟导致的超时,可在连接URI末尾添加&timeout=30参数,将超时时间延长到30秒测试。
内容的提问来源于stack exchange,提问作者chetan

