我正在尝试使用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:“连接”对象没有属性“光标”
我在做什么错了?
答案 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 升级到此版本解决了该问题。