Извлекать данные из базы данных mysql, используя библиотеку Python' odo

Мне нужно извлечь данные из базы данных MySQL в фрейм данных Pandas, используя библиотеку odo в Python. Документация Odo предоставляет только информацию о передаче имени таблицы для извлечения данных, но как мне передать строку запроса SQL, которая извлекает необходимые данные из базы данных.

Следующий код работает:

импорт одо

импортировать панд как pd

data = odo ('mysql + pymysql: // имя пользователя:{0}@localhost/dbname::{1}'.format('пароль', 'table_name'), pd.DataFrame)

Но как мне передать строку SQL вместо имени таблицы. Потому что мне нужно объединить несколько других таблиц, чтобы получить необходимые данные.

1 ответ

Передача строки непосредственно в odo не поддерживается модулем. Существует три способа перемещения данных с использованием перечисленных инструментов.

Сначала создайте SQL-запрос в виде строки и прочитайте, используя:

data = pandas.read_sql_query(sql, con, index_col=None,
                             coerce_float=True, params=None,
                             parse_dates=None, chunksize=None)[source]

ссылка http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.read_sql_query.html

Во-вторых, использование метода odo требует запуска запроса в словарь, а затем использовать словарь в структуре odo (источник, назначение).

cursor.execute(sql)
results = db.engine.execute(sql)

data = odo(results, pd.DataFrame)

см. стр. 30 из https://media.readthedocs.org/pdf/odo/latest/odo.pdf

ref Как выполнить сырой SQL в приложении SQLAlchemy-flask

ref cursor.fetchall () против списка (курсор) в Python

Наконец, чтобы увеличить скорость выполнения, рассмотрите добавление фрейма данных pandas для каждого результата в результатах.

result = db.engine.execute(sql).fetchone()

data = pd.DataFrame(index=index, columns=list('AB'))
data = df_.fillna(0) # with 0s rather than NaNs

while result is not None:
    dataappend = pd.DataFrame(result, columns=list('AB'))
    data.append(dataappend)
    result = db.engine.execute(sql).fetchone()

ссылка https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.append.html

ref Создание пустого Pandas DataFrame, а затем его заполнение?

Другие вопросы по тегам