Pandas 0.24 errores operacionales de read_sql

Acabo de actualizar a Pandas 0.24.0 desde 0.23.4 (Python 2.7.12), y muchas de mis consultas de pd.read_sql están rompiendo. Parece algo relacionado con MySQL, pero es extraño que estos errores solo ocurran después de actualizar mi versión de pandas. ¿Alguna idea de qué está pasando?

Aquí está mi tabla de 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; 

Aquí está mi consulta:

 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] 

Y aquí está el error:

 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;`'] 

También obtuve esto para otras consultas más complejas, pero no las publicaré aquí.

Según la documentación, el primer argumento es una cadena (nombre de tabla) o SQLAlchemy Seleccionable (objeto de select o text ). En otras palabras, pd.read_sql() está delegando a pd.read_sql_table() y está tratando la cadena de consulta completa como un identificador de tabla.

Envuelva su cadena de consulta en una construcción text() primero:

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

De esta manera, pd.read_sql() delegará en pd.read_sql_query() lugar. Otra opción es llamarlo directamente.

Intente usar pd.read_sql_query(sql, con) , en lugar de pd.read_sql(...) .

Asi que:

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