psql正常连接PostgreSQL但Python Tortoise-ORM连接报asyncio超时错误
排查与解决步骤
- 验证数据库密码配置
你当前使用的psql连接命令未携带密码参数,说明root用户可能配置了免密登录、IP段信任规则或密码为空。首先检查代码URL中的PASSWORD占位符是否已替换为正确的实际密码,若数据库未设置密码,直接删除URL中的密码段即可,修改后格式如下:
错误的密码配置会导致鉴权阻塞,最终触发超时错误。@property def DATABASE_URL(self): return f"postgres://root@192.168.88.218:26257/user_service_db" - 检查代码运行环境的网络连通性
若你的代码运行在Docker/虚拟机等隔离环境中,不能仅在宿主机验证psql连通性,需要进入代码运行的环境中执行以下命令验证网络是否可达:
若该命令执行失败,需调整容器/虚拟机的网络配置,保证其可以访问192.168.88.218网段。psql -U root -d user_service_db -h 192.168.88.218 -p 26257 - 调整数据库URL前缀适配异步驱动
Tortoise-ORM默认使用asyncpg作为PostgreSQL异步驱动,部分版本中postgres://前缀存在兼容问题,可以尝试替换为postgresql+asyncpg://前缀,修改后格式如下:postgresql+asyncpg://root@192.168.88.218:26257/user_service_db - 显式配置连接超时参数
默认的连接超时时间过短也会触发该错误,你可以直接在URL后追加超时参数,或者修改TORTOISE_ORM配置显式指定超时时间:TORTOISE_ORM = { "connections": { "default": { "engine": "tortoise.backends.asyncpg", "credentials": { "host": "192.168.88.218", "port": 26257, "user": "root", "password": "", "database": "user_service_db", "connect_timeout": 30 } } }, "apps": { "models": { "models": ["app.models.email_code", "app.models.user", "app.models.currency", "aerich.models"], "default_connection": "default", }, }, } - 检查数据库访问白名单配置
检查PostgreSQL的pg_hba.conf配置(或CockroachDB的客户端认证规则),确认是否允许代码运行环境的IP地址访问数据库,若IP不在白名单中,数据库会直接拒绝连接请求导致超时。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

