Cualquier ayuda sobre este problema será muy apreciada.
Entonces, básicamente, quiero ejecutar una consulta en mi base de datos SQL y almacenar los datos devueltos como estructura de datos Pandas.
He adjuntado el código para la consulta.
Estoy leyendo la documentación sobre Pandas, pero tengo problemas para identificar el tipo de retorno de mi consulta.
Intenté imprimir el resultado de la consulta, pero no proporciona ninguna información útil.
¡¡¡¡Gracias!!!!
from sqlalchemy import create_engine
engine2 = create_engine('mysql://THE DATABASE I AM ACCESSING')
connection2 = engine2.connect()
dataid = 1022
resoverall = connection2.execute("
SELECT
sum(BLABLA) AS BLA,
sum(BLABLABLA2) AS BLABLABLA2,
sum(SOME_INT) AS SOME_INT,
sum(SOME_INT2) AS SOME_INT2,
100*sum(SOME_INT2)/sum(SOME_INT) AS ctr,
sum(SOME_INT2)/sum(SOME_INT) AS cpc
FROM daily_report_cooked
WHERE campaign_id = '%s'", %dataid)
Así que quiero entender cuál es el formato / tipo de datos de mi variable "resoverall" y cómo ponerlo con la estructura de datos PANDAS.
python
mysql
data-structures
pandas
user1613017
fuente
fuente
Respuestas:
Aquí está el código más corto que hará el trabajo:
Puede ir más elegante y analizar los tipos como en la respuesta de Paul.
fuente
df = DataFrame(cursor.fetchall())
devuelveValueError: DataFrame constructor not properly called!
, parece que la tupla de tuplas no es aceptable para el constructor DataFrame. Tampoco hay.keys()
un cursor en el modo diccionario o tupla.keys()
función, pero no puedo hacer que funcione.df.columns=[ x.name for x in recoverall.description ]
Edición: marzo de 2015
Como se indica a continuación, pandas ahora usa SQLAlchemy para leer desde ( read_sql ) e insertar en ( to_sql ) una base de datos. Lo siguiente debería funcionar
Respuesta anterior: Via mikebmassey de una pregunta similar
fuente
pd.read_sql()
en el fragmento de código anterior?pyodbc
ypandas
juntos bastante. Añadiendo una nueva respuesta con el ejemplo, FYI.Si está utilizando el ORM de SQLAlchemy en lugar del lenguaje de expresión, es posible que desee convertir un objeto de tipo
sqlalchemy.orm.query.Query
en un marco de datos de Pandas.El enfoque más limpio es obtener el SQL generado a partir del atributo de declaración de la consulta y luego ejecutarlo con el
read_sql()
método de pandas . Por ejemplo, comenzando con un objeto de consulta llamadoquery
:fuente
pandas.read_sql_query
, pasándolaquery.statement
. Vea esta respuesta: stackoverflow.com/a/29528804/1273938Editar 2014-09-30:
pandas ahora tiene una
read_sql
función. Definitivamente quieres usar eso en su lugar.Respuesta original:
No puedo ayudarte con SQLAlchemy: siempre uso pyodbc, MySQLdb o psychopg2 según sea necesario. Pero al hacerlo, una función tan simple como la siguiente tiende a adaptarse a mis necesidades:
fuente
read_sql
todavía puede aceptar conexiones que no sean de SQLAlchemy a través de, por ejemplo, pyodbc, psychopg2, etc.Conector MySQL
Para aquellos que funcionan con el conector mysql, pueden usar este código como punto de partida. (Gracias a @Daniel Velkov)
Refs usados:
fuente
Aquí está el código que utilizo. Espero que esto ayude.
fuente
Esta es una respuesta breve y clara a su problema:
fuente
1. Usando MySQL-connector-python
2. Usando SQLAlchemy
fuente
Como Nathan, a menudo quiero volcar los resultados de una consulta sqlalchemy o sqlsoup en un marco de datos de Pandas. Mi propia solución para esto es:
fuente
pandas.read_sql_query
, pasándolaquery.statement
. Vea esta respuesta: stackoverflow.com/a/29528804/1273938resoverall
es un objeto ResultProxy sqlalchemy. Puede leer más sobre esto en los documentos de sqlalchemy , este último explica el uso básico de trabajar con motores y conexiones. Importante aquí es queresoverall
es como un dict.A los pandas le gustan los objetos similares a dict para crear sus estructuras de datos, consulte los documentos en línea
Buena suerte con sqlalchemy y pandas.
fuente
Simplemente use
pandas
ypyodbc
juntos. Tendrá que modificar su cadena de conexión (connstr
) de acuerdo con las especificaciones de su base de datos.Lo he usado
pyodbc
con varias bases de datos empresariales (por ejemplo, SQL Server, MySQL, MariaDB, IBM).fuente
to_sql
método en elDataFrame
objeto. Ese método está predeterminado en SQLite, por lo que debe pasarle explícitamente un objeto que apunte a la base de datos MSSQL. Ver documentos .pandas
estuviera más optimizado para el trabajo ETL ligero, pero por desgracia ...Esta pregunta es vieja, pero quería agregar mis dos centavos. Leí la pregunta como "Quiero ejecutar una consulta en mi [mi] base de datos SQL y almacenar los datos devueltos como estructura de datos Pandas [DataFrame]".
Por el código, parece que te refieres a la base de datos mysql y asumes que te refieres a pandas DataFrame.
Por ejemplo,
Esto importará todas las filas de testTable en un DataFrame.
fuente
Aquí esta el mio. Por si acaso si está utilizando "pymysql":
fuente
pandas.io.sql.write_frame está ANULADO. https://pandas.pydata.org/pandas-docs/version/0.15.2/generated/pandas.io.sql.write_frame.html
Debería cambiar para usar pandas.DataFrame.to_sql https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html
Hay otra solucion. PYODBC a Pandas - DataFrame no funciona - La forma de los valores pasados es (x, y), los índices implican (w, z)
A partir de Pandas 0.12 (creo) puedes hacer:
Antes de 0.12, podía hacer:
fuente
Mucho tiempo desde la última publicación, pero tal vez ayude a alguien ...
Camino más corto que Paul H:
fuente
la mejor manera de hacer esto
fuente
Si el tipo de resultado es ResultSet , primero debe convertirlo a diccionario. Luego, las columnas de DataFrame se recopilarán automáticamente.
Esto funciona en mi caso:
fuente