pythonpandassqlalchemypymysql

Pandas read_sql() - AttributeError: 'Engine' object has no attribute 'cursor'


I am trying to read data from MySQL query using pandas read_sql() method with python3+sqlalchemy+pymysql

I tried to follow the following tutorials -

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

Everything just looks good with the code

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)

Receiving following error -

AttributeError: 'Engine' object has no attribute 'cursor'

When I tried to pass the 'connection' variable instead of the 'engine', like below -

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)

it says -

AttributeError: 'Connection' object has no attribute 'cursor'

What am I doing wrong?


Solution

  • Reference - https://github.com/pandas-dev/pandas/issues/23030#issuecomment-428140488

    The problem went away when I

    It seems like something was cached. I could use read_sql() and other pandas sql functions by passing 'engine' reference -

    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)