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

基于aiohttp+asyncpgsa开发RESTAPI时调用fetch触发record_class类TypeError

报错核心原因

该问题属于典型的依赖版本接口不兼容:

  • 新版 asyncpg 迭代时,为 fetch、fetchrow 等查询方法新增了 record_class 入参,调用内部 _execute 方法时会自动把该参数透传
  • 所使用的旧版本 asyncpgsa 重写了继承自 asyncpg 连接类的 _execute 方法,方法签名没有预留对应参数的接收位置,无法处理透传过来的 record_class 关键字参数,最终触发 TypeError 报错。
排查步骤
  • 执行 pip list | grep -E 'asyncpg|asyncpgsa' 查看当前环境两个库的实际版本,与运行正常的同栈项目做版本对标
  • 检查最近的依赖安装记录,确认是否存在未锁定版本时自动拉取了高版本 asyncpg 的情况
可实现的解决方案
  • 版本降级适配:将 asyncpg 降至与当前 asyncpgsa 兼容的版本(即 0.29.0 之前的版本,该版本是首次新增 record_class 参数的迭代版本),可执行 pip install asyncpg==0.28.0 后重试原有查询逻辑
  • 版本升级适配:直接将 asyncpgsa 升级到适配新版 asyncpg 接口的版本,升级前核对官方适配说明,避免引入其他 breaking change
  • 临时代码补丁:如果暂不调整依赖版本,可手动修改 asyncpgsa 封装的 _execute 方法,增加透传参数的接收逻辑,修改后参考代码:
def _execute(self, query, args, limit, timeout, return_status=False, **kwargs):
    query, compiled_args = compile_query(query, dialect=self._dialect)
    args = compiled_args or args
    return super()._execute(
        query, args, limit, timeout,
        return_status=return_status, **kwargs
    )

内容的提问来源于stack exchange,提问作者Alex Semenchenko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 09:45:04