【Python】遇到 AttributeError: OptionEngine object has no attribute execute 的解决方法

我在用pycharm运行项目,执行sql语句的时候,好端端的,之前运行pandas读取sql表是没有问题的,这几天就遇到这个错误:

AttributeError: ‘OptionEngine’ object has no attribute ‘execute’

在这里插入图片描述之前也没有遇到这个问题呀,不知道是不是sql的版本发生更改了?

网上搜集发现,这个错误通常意味着你尝试在一个 OptionEngine 对象上访问一个不存在的 execute 方法。

问题的原因:

主要是这两个原因引起的:

1.SQLAlchemy 版本问题

这个是比较常见可能发生的。

如果你在使用 SQLAlchemy 2.0.0 或更高版本,create_engine() 返回的是 OptionEngine 对象,而不是之前的 Engine 对象。

那么OptionEngine 对象就没有 execute 方法,这个时候就会抛出 “‘OptionEngine’ object has no attribute ‘execute’” 这个错误了。

2.对象传错了

在使用read_sql 的方法时,本来是要传递一个数据库连接对象,而不是一个 Engine 对象,可以检查一下代码,看看是不是这个对象传错了。

还有一种说法是, Engine 对象没有 execute 方法,而 Connection 对象有。正确的做法是使用 engine.connect() 来获取一个 Connection 对象,然后将其传递给 pd.read_sqlpd.read_sql_query 方法。

在这里插入图片描述

解决方法:

1. 使用正确的连接对象

针对上面第2条可能导致这个错误的原因,我们可以在调用 read_sql_query() 方法时,传递一个连接对象,是通过 engine.connect() 获取,而不是一个 Engine 对象。

例如:

import pandas as pd
from sqlalchemy import create_engine, text
engine = create_engine('mysql+pymysql://root:root1234@127.0.0.1:3308/beststock')
sql = "select *  FROM table_name limit 10"
df = pd.read_sql(sql, engine.connect())  # 使用 engine.connect() 获取 Connection 对象
print(df)

这样可以确保传递给 read_sql_query() 的是一个正确的连接对象,而不是 OptionEngine 对象。

(但是我也尝试了这个方法来修改我的代码,也没法子解决我的问题;看来我的问题不在代码上)

2. 升级 或者 降级 SQLAlchemy

根据官方文档,将 SQLAlchemy 升级到 2.1.0 或以上版本可以解决此问题。我们可以在cmd上运行这个命令升级 SQLAlchemy:

pip install --upgrade SQLAlchemy

这将确保您使用的是支持 execute 方法的 Engine 对象。

如果升级 SQLAlchemy 不方便,您也可以考虑降级到 1.4.32 或更早的版本,这些版本不会导致这个问题。例如:

pip install SQLAlchemy==1.4.32

(但是这两个方法我也尝试了,更新也成功了,但是问题还是仍然存在)

3. 个人经验: cv大法 :

本人尝试了上面的版本,全部都不成功的情况下,我还是用回那一招,替换原来的安装包的文件。

具体的安装包在上面资源处,需要的伙伴可以自取呀~

详细点的替换方法见(做法同) :

【Python】pandas 和numpy版本不兼容怎么办?遇到numpy.dtype size change的解决方法(解决方法篇)

PS,重点提醒: 在替换包的时候,由于版本问题,导入包会有不匹配的风险,建议原来的包不要直接替换或者删除,先重命名,或者备份一份,再把后面的包导入,会比较好!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值