Pandas 0.24 read_sql эксплуатационные ошибки - PullRequest
0 голосов
/ 30 января 2019

Я только что обновился до Pandas 0.24.0 с 0.23.4 (Python 2.7.12), и многие из моих pd.read_sql запросов не работают.Похоже, что-то связано с MySQL, но странно, что эти ошибки возникают только после обновления моей версии для панд.Есть идеи, что происходит?

Вот моя таблица MySQL:

CREATE TABLE `xlations_topic_update_status` (
  `run_ts` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Вот мой запрос:

import pandas as pd
from sqlalchemy import create_engine
db_engine = create_engine('mysql+mysqldb://<><>/product_analytics', echo=False)
pd.read_sql('select max(run_ts) from product_analytics.xlations_topic_update_status', con = db_engine).values[0][0]

И вот ошибка:

OperationalError: (_mysql_exceptions.OperationalError) (1059, "Identifier name 'select max(run_ts) from product_analytics.xlations_topic_update_status;' is too long") [SQL: 'DESCRIBE `select max(run_ts) from product_analytics.xlations_topic_update_status;`']

Я имеютакже получил это для других более сложных запросов, но не будет публиковать их здесь.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Попробуйте использовать pd.read_sql_query(sql, con) вместо pd.read_sql(...).

Итак:

pd.read_sql_query('select max(run_ts) from product_analytics.xlations_topic_update_status', con = db_engine).values[0][0]
0 голосов
/ 30 января 2019

Согласно документации первый аргумент является либо строкой (именем таблицы), либо SQLAlchemy Selectable (select или text объект).Другими словами, pd.read_sql() делегирует pd.read_sql_table() и обрабатывает всю строку запроса как идентификатор таблицы.

Оберните строку запроса в text() сначала построить:

stmt = text('select max(run_ts) from product_analytics.xlations_topic_update_status')
pd.read_sql(stmt, con = db_engine).values[0][0]

Таким образом pd.read_sql() будет делегироваться pd.read_sql_query().Другой вариант - позвонить напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...