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

使用SQLAlchemy调用MySQL存储过程时出现Commands out of sync错误

MySQL存储过程在SQLAlchemy中执行报"Commands out of sync"错误的解决方法

错误原因

调用返回结果集的MySQL存储过程时,MySQL服务器会先返回查询结果,再返回一个"OK"状态包标记存储过程执行完成。你使用的mysqlconnector驱动默认未启用多结果集处理功能,导致SQLAlchemy连接池回收连接时,连接仍处于未清理的多结果集状态,执行回滚操作时触发Commands out of sync; you can't run this command now错误。

而MySQL终端、JDBC驱动默认会自动处理所有返回的结果包,因此不会出现该问题。

解决步骤

  • 导入多结果集常量:从mysql.connector.constants中引入CLIENT类,启用MULTI_RESULTS标记
  • 配置SQLAlchemy引擎:在create_engine的connect_args参数中添加client_flags,开启多结果集支持

修正后的代码示例

from sqlalchemy import create_engine
from sqlalchemy.pool import NullPool
from mysql.connector.constants import CLIENT

# 启用多结果集支持的引擎配置
engine = create_engine(
    "mysql+mysqlconnector://my_user:my_pass@my_server/my_db",
    poolclass=NullPool,
    connect_args={"client_flags": [CLIENT.MULTI_RESULTS]}
)

# 执行存储过程并读取结果
with engine.connect() as conn:
    res = conn.execute('call exampleone()').fetchall()

补充说明

  • 如果存储过程包含多个SELECT语句、返回多个结果集,需同时启用CLIENT.MULTI_STATEMENTS标记
  • 使用with engine.connect()上下文管理器可确保连接正确回收,避免连接池中的脏连接问题

内容的提问来源于stack exchange,提问作者QLands - Carlos Quiros

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:03:17