tutorial read_sql_query read_sql index from espaƱol create python pandas sqlalchemy flask-sqlalchemy

python - read_sql_query - pandas read_sql



SQLAlchemy ORM conversiĆ³n a pandas DataFrame (4)

Este tema no se ha abordado en mucho tiempo, aquí o en otro lugar. ¿Hay alguna solución que convierta un SQLAlchemy <Query object> en un pandas DataFrame?

Pandas tiene la capacidad de usar pandas.read_sql pero esto requiere el uso de SQL sin pandas.read_sql . Tengo dos razones para querer evitarlo: 1) Ya tengo todo usando ORM (una buena razón en sí misma) y 2) Estoy usando listas de Python como parte de la consulta (por ejemplo: .db.session.query(Item).filter(Item.symbol.in_(add_symbols) donde Item es mi clase de modelo y add_symbols es una lista). Este es el equivalente de SQL SELECT ... from ... WHERE ... IN .

¿Hay algo posible?


A continuación debería funcionar en la mayoría de los casos:

df = pd.read_sql(query.statement, query.session.bind)

Consulte la documentación de pandas.read_sql para obtener más información sobre los parámetros.


La solución seleccionada no funcionó para mí, ya que seguía recibiendo el error

AttributeError: el objeto ''AnnotatedSelect'' no tiene el atributo ''lower''

Encontré lo siguiente trabajado:

df = pd.read_sql_query(query.statement, engine)


Si desea compilar una consulta con parámetros y dialectos de argumentos específicos, use algo como esto:

c = query.statement.compile(query.session.bind) df = pandas.read_sql(c.string, query.session.bind, params=c.params)


Solo para dejar esto más claro para los programadores de pandas novatos, aquí hay un ejemplo concreto,

pd.read_sql(session.query(Complaint).filter(Complaint.id == 2).statement,session.bind)

Aquí seleccionamos una queja de la tabla de quejas (el modelo de sqlalchemy es Queja) con id = 2