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