You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLAlchemy搭配Psycopg3调用engine.begin()时挂起,使用NullPool正常的问题求助

SQLAlchemy搭配Psycopg3调用engine.begin()时挂起,使用NullPool正常的问题求助

最近用SQLAlchemy搭配Psycopg3做数据库操作时遇到了个棘手的问题,想过来请教下各位大佬。

我是这么初始化数据库连接引擎的:

engine = create_engine(
    PG_URI,
    echo=True,
    echo_pool=True,
    pool_size=3,
    pool_timeout=5,
    pool_pre_ping=True,
    connect_args={
        "connect_timeout": 5,
        "options": f"-c statement-timeout={5 * 1000}",
    },
)

之后我写了个简单的Postgres ping检测逻辑,结果发现代码会直接挂在engine.begin()这一步,完全没有后续输出:

logger.info("Pinging Postgres (sync) ...")
with engine.begin() as conn: # 就是这里会卡住不动
    conn.execute(text("SELECT 1"))
    logger.info("Ping PG successful")
    return True

奇怪的是,我把连接池换成NullPool之后,这个ping操作就正常执行了。而且日志里只打了“Pinging Postgres (sync) ...”这一句,连半点儿和连接池相关的日志都没有,感觉问题大概率出在连接池获取连接的环节,可能是创建新连接或者重连的时候卡住了?

我怀疑是不是得给连接池加一些特定的配置参数才能解决这个挂起的问题,但目前还没理清具体该怎么弄,有没有大佬遇到过类似的情况,给指个方向呀?

备注:内容来源于stack exchange,提问作者Jiew Meng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 11:20:27