MySQL5.7适配SQLAlchemy问题:transaction_isolation变量报错求助
解决MySQL 5.7与SQLAlchemy 2.0.x的transaction_isolation报错问题
适配的SQLAlchemy版本
- SQLAlchemy 1.4.x系列完全兼容MySQL 5.7,该版本会自动根据MySQL版本选择对应的隔离级别变量名(MySQL 5.7及以下用
tx_isolation,MySQL 8.0+用transaction_isolation)。可以安装1.4.x的最新稳定版,执行命令:pip install sqlalchemy~=1.4.0
不降级SQLAlchemy的解决方法
如果必须保留SQLAlchemy 2.0.x,有两种可行方案:
方案1:自定义MySQL方言覆盖变量名
创建自定义方言类,替换SQLAlchemy默认使用的隔离级别变量名:
from sqlalchemy.dialects.mysql import pymysql class MySQL57Dialect(pymysql.MySQLDialect_pymysql): def _get_isolation_level_variable(self, connection): # 强制使用MySQL 5.7支持的tx_isolation变量 return "tx_isolation"
创建引擎时指定使用该方言:
from sqlalchemy import create_engine engine = create_engine( "mysql+pymysql://your_user:your_password@your_host/your_db", connect_args={"dialect": MySQL57Dialect()} )
方案2:手动设置隔离级别
绕过SQLAlchemy自动查询隔离级别的逻辑,在连接建立后手动设置:
from sqlalchemy import create_engine engine = create_engine("mysql+pymysql://your_user:your_password@your_host/your_db") with engine.connect() as conn: # 根据需求设置隔离级别,例如READ COMMITTED conn.execute("SET tx_isolation = 'READ-COMMITTED'") # 执行后续数据库操作
问题原因说明
MySQL 5.7仅支持tx_isolation作为事务隔离级别的系统变量名,而SQLAlchemy 2.0+版本开始默认使用MySQL 8.0+引入的transaction_isolation变量名,因此触发1193 Unknown system variable错误。
内容的提问来源于stack exchange,提问作者Suresh Anand
相关产品推荐
相关产品推荐

