此错误通常在使用Airflow 1.10或更高版本时出现,其中存在多个连接。它通常是由于两个连接的编码不同而导致的。解决此问题的方法是将所有连接都设置为统一的编码格式。
以下是解决该问题的示例代码:
在“airflow.cfg”文件中,将以下行添加到[sqllachemy]部分:
sqlalchemy.url = db_type://user:password@host:port/dbname?charset=utf8mb4
这将确保所有连接使用“utf8mb4”编码格式。
如果您的连接中已经有了其他编码,您可以通过编写脚本来修复它们,例如:
from airflow.models.connection import Connection
# 获取所有连接
conn_list = session.query(Connection).all()
# 遍历所有连接
for conn in conn_list:
if conn.conn_type in ['mysql', 'mysql_legacy']:
conn.extra = json.dumps(conn.extra or {})
conn.extra_dejson['charset'] = 'utf8mb4'
conn.extra = json.dumps(conn.extra_dejson)
session.commit()
session.close()
这将确保所有MySQL连接都使用“utf8mb4”编码格式。