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

Apache Airflow 2.6.1与SQLAlchemy 2.0.2版本冲突问题求助

问题分析与解决方法

问题本质

你的核心矛盾是依赖版本冲突:

  • Apache Airflow 2.6.1通过官方约束文件强制要求SQLAlchemy 1.4.48,它内部的数据库连接代码仍在使用SQLAlchemy 1.x的encoding参数;
  • 你的业务模块依赖SQLAlchemy 2.0.2的新特性,无法降级到1.4.48;
  • 升级SQLAlchemy到2.0后,Airflow调用create_engine()时传入的encoding参数已被SQLAlchemy 2.0移除,因此抛出TypeError。

解决方案

方案1:升级Airflow到支持SQLAlchemy 2.0的版本(推荐)

Airflow 2.7.0及以上版本已正式支持SQLAlchemy 2.0,直接升级Airflow即可彻底解决版本冲突:

  1. 卸载现有Airflow:
    pip uninstall apache-airflow -y
    
  2. 安装Airflow 2.7.0+版本(以2.7.0为例),使用对应版本的约束文件:
    pip install "apache-airflow[postgres]==2.7.0" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.7.0/constraints-3.9.txt"
    
  3. 安装SQLAlchemy 2.0.2:
    pip install sqlalchemy==2.0.2
    

此方案无需修改代码,是最稳妥的解决方式。

方案2:隔离依赖环境(无法升级Airflow时使用)

如果因业务限制无法升级Airflow,可将Airflow与你的数据库模块放在独立的虚拟环境/容器中,通过跨进程通信(如API、消息队列)交互:

  • 为Airflow单独创建虚拟环境,安装2.6.1版本和SQLAlchemy 1.4.48;
  • 为你的数据库模块创建另一个虚拟环境,安装SQLAlchemy 2.0.2;
  • 两者通过HTTP接口、Redis/RabbitMQ等方式传递数据,避免直接共享依赖。

方案3:临时修改Airflow源码(应急用,不推荐)

如果必须在同一环境运行,可临时修改Airflow中传递encoding参数的代码:

  1. 找到Airflow中调用create_engine并传入encoding的文件(通常在airflow/utils/db.py或相关数据库连接模块);
  2. 将encoding参数移除,或替换为SQLAlchemy 2.0支持的方式:
    • 原代码示例:
      engine = create_engine(url, encoding='utf-8', ...)
      
    • 修改后:
      # 方式1:移除encoding参数,SQLAlchemy 2.0默认使用utf-8
      engine = create_engine(url, ...)
      # 方式2:通过connect_args传递(如果需要指定编码)
      engine = create_engine(url, connect_args={"encoding": "utf-8"}, ...)
      

注意:此方法会破坏Airflow的官方一致性,后续升级Airflow时需要重新修改,且可能存在其他未发现的兼容性问题,仅作为临时应急方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:12:52