使用SQLAlchemy连接远程MySQL执行SQL时遇ObjectNotExecutableError
解决SQLAlchemy执行SQL时的ObjectNotExecutableError错误
这个错误是因为你使用的SQLAlchemy版本为2.0及以上,该版本要求execute()方法必须传入可执行的SQL表达式对象,不能直接传入原始字符串SQL。解决步骤如下:
- 从sqlalchemy导入
text函数,用它包裹你的SQL字符串 - 将
con.execute()的参数替换为text('你的SQL语句')
修改后的完整代码:
from sqlalchemy import create_engine, text import os db_user = os.environ['USER'] db_password = os.environ['PWD'] db_host = os.environ['HOST'] engine = create_engine(f"mysql+pymysql://{db_user}:{db_password}@{db_host}") with engine.connect() as con: rs = con.execute(text('SELECT schema_name FROM information_schema.schemata;')) for row in rs: print(row)
额外补充:
- 原代码缺少
import os语句,运行时会触发报错,需要补上 - 若执行增删改类操作,SQLAlchemy 2.0版本需手动调用
con.commit()提交事务;查询类操作无需提交。
内容的提问来源于stack exchange,提问作者Sameer Mahajan
相关产品推荐
相关产品推荐

