熊猫read_sql()-AttributeError:“ Engine”对象没有属性“ cursor”

时间:2019-03-23 14:51:41

标签: python pandas sqlalchemy pymysql

我正在尝试使用python3 + sqlalchemy + pymysql的pandas read_sql()方法从MySQL查询中读取数据

我尝试遵循以下教程-

https://pythondata.com/quick-tip-sqlalchemy-for-mysql-and-pandas/

https://www.youtube.com/watch?v=M-4EpNdlSuY

https://www.programcreek.com/python/example/101381/pandas.read_sql

代码看起来一切都很好

import pandas
import sqlalchemy
engine = sqlalchemy.create_engine('mysql+pymysql://root:mypass@example.com:3306/mydatabase')
df = pandas.read_sql("SELECT * FROM persons", con = engine)

收到以下错误-

  

AttributeError:“ Engine”对象没有属性“ cursor”

当我尝试传递“连接”变量而不是“引擎”时,如下所示-

import pandas
import sqlalchemy
engine = sqlalchemy.create_engine('mysql+pymysql://root:mypass@example.com:3306/mydatabase')
connection = engine.connect()
df = pandas.read_sql("SELECT * FROM persons", con = connection)

说-

  

AttributeError:“连接”对象没有属性“光标”

我在做什么错了?

3 个答案:

答案 0 :(得分:1)

参考-https://github.com/pandas-dev/pandas/issues/23030#issuecomment-428140488

我离开时问题就消失了

  • 保存了我的工作簿
  • 重新启动电脑
  • 已重新加载

似乎已缓存了某些内容。我可以通过传递'engine'参考来使用read_sql()和其他pandas sql函数-

import pandas
import sqlalchemy
engine = sqlalchemy.create_engine('mysql+pymysql://root:mypass@example.com:3306/mydatabase')
df = pandas.read_sql("SELECT * FROM persons", con = engine)

答案 1 :(得分:0)

我认为您正在寻找pyodbc,而sqlalchemy是查询数据库的另一种方法,请检查https://towardsdatascience.com/sqlalchemy-python-tutorial-79a577141a91

import sqlalchemy as sq
engine = sq.create_engine('mysql+pymysql://root:mypass@example.com:3306/mydatabase')
connection = engine.connect()
metadata = sq.MetaData()
persons = sq.Table('persons', metadata, autoload=True, autoload_with=engine)

Ret = connection.execute(sq.select([persons]))
youdf=pd.DataFrame(Ret.fetchall())

答案 2 :(得分:0)

这可能是因为版本不匹配。我以前用过的旧笔记本也有类似的错误:

<块引用>

AttributeError: 'Engine' 对象没有属性 'execution_options'

经过几次测试后,我发现问题出现在 pandas 1.1.0 中。在 release notes 中,SQLAlchemy 的最低版本是 1.1.4。将 SQLAlchemy 升级到此版本解决了该问题。