Pandas read_sql () - AttributeError: у объекта «Engine» нет атрибута «курсор» - PullRequest
1 голос
/ 23 марта 2019

Я пытаюсь прочитать данные из запроса MySQL, используя метод pandas read_sql () с python3 + sqlalchemy + pymysql

Я пытался следовать следующим учебникам -

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'

Когда я попытался передать переменную 'connection' вместо 'engine', как показано ниже -

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: у объекта «Соединение» нет атрибута «курсор»

Что я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 24 марта 2019

Ссылка - https://github.com/pandas-dev/pandas/issues/23030#issuecomment-428140488

Проблема исчезла, когда я

  • сохранил свою книгу
  • Перезагрузил компьютер
  • Перезагрузил

Кажется, что-то было кешировано.Я мог бы использовать read_sql () и другие функции sql для панд, передав ссылку на «engine» -

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)
0 голосов
/ 23 марта 2019

Я думаю, что вы ищете 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())
...