Pandas read_sql_query() 在使用 SQLAlchemy 2.0.0 时抛出 “‘OptionEngine’ object has no attribute ‘execute'” 错误

Pandas read_sql_query() 在使用 SQLAlchemy 2.0.0 时抛出 “‘OptionEngine’ object has no attribute ‘execute'” 错误

在本文中,我们将介绍当使用 SQLAlchemy 2.0.0 时,Pandas read_sql_query() 抛出 “‘OptionEngine’ object has no attribute ‘execute'” 错误的情况。

阅读更多:Pandas 教程

背景

首先,让我们简单介绍一下 Pandas 和 SQLAlchemy 两个库。Pandas 是一个用于数据分析的 Python 库,它提供了灵活高效的数据结构和数据分析工具。而 SQLAlchemy 则是一个用 Python 编程语言编写的 SQL 工具包和对象关系映射器(ORM),它允许 Python 开发人员使用 SQL 与关系型数据库进行交互,并可以将数据库表映射到 Python 对象。这两个库通常被一起使用。

在最新版本的 SQLAlchemy(2.0.0)中,它移除了老版本中的命令行和 ORM 引擎,并将将命令行和 ORM 引擎合并成了一个新的 OptionEngine。

问题

在使用 SQLAlchemy 2.0.0 时,通常可以使用 read_sql_query() 方法从数据库读取数据到 Pandas 的 DataFrame 中。但是,当你尝试这样做时,你可能会遇到以下错误:

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

这个错误是因为之前 Pandas 的 read_sql_query() 方法是使用 SQLAlchemy 的 create_engine() 创建的一个引擎对象,但在 SQLAlchemy 2.0.0 中,create_engine() 返回的是新的 OptionEngine,而不是之前的 Engine 对象。因此,在使用 read_sql_query() 方法时,会抛出上面的错误。

解决方案

要解决这个问题,我们需要使用新的 OptionEngine 对象的 execute() 方法代替之前的 Engine 对象的 execute() 方法。为了让 Pandas 在新的 SQLAlchemy 中正常运行,我们需要在调用 read_sql_query() 方法时手动传递一个新的引擎对象。

以下是一个使用 SQLAlchemy 2.0.0 和 Pandas 读取 MySQL 数据库的示例代码:

from sqlalchemy import create_engine
import pandas as pd 

# 创建新的 OptionEngine
engine = create_engine("mysql+pymysql://user:password@host:port/db_name", echo=False)

# 从数据库中读取数据到 Pandas DataFrame
df = pd.read_sql_query("SELECT * from table_name", con=engine)
Python

在上面的代码中,我们使用 SQLAlchemy 的 create_engine() 方法创建了一个新的 OptionEngine 对象。然后,我们将这个对象传递给 Pandas 的 read_sql_query() 方法。

总结

在使用 SQLAlchemy 2.0.0 和 Pandas 读取数据库时,如果你遇到了 “‘OptionEngine’ object has no attribute ‘execute'” 错误,那么这篇文章应该可以为你提供一些帮助。解决这个问题的方法是手动创建一个新的 OptionEngine 对象,并将这个对象传递给 Pandas 的 read_sql_query() 方法。希望这篇文章对你有所帮助!

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册