Esta es una simple pregunta que no he sido capaz de encontrar una respuesta. Tengo un .Archivo SQL con dos comandos. Me gustaría tener Pandas tire el resultado de los comandos en un DataFrame.

El SQL del archivo de comandos como tal, con la más larga consulta con la fecha de hoy.

SET @todaydate = DATE(NOW());
SELECT ...long query....;

He intentado usar read_sql de la siguiente manera después de establecer mi conexión (prod_db) y obtener el mensaje de error «NoneType’ el objeto no es iterable’

sqlpath = 'path.sql'
scriptFile = open(sqlpath,'r')
script = scriptFile.read()
df = pd.read_sql(script,prod_db) 

También he intentado utilizar la función y el enfoque que se describe aquí la lectura externa de sql script en python pero no estoy seguro de cómo obtener el resultado en un pandas dataframe (o tal vez me estoy perdiendo algo). No parece ser la lectura de los resultados como puedo obtener la orden ‘Saltado’ repetidamente.

def executeScriptsFromFile(filename):
    fd = open(filename, 'r')
    sqlFile = fd.read()
    fd.close()
    # all SQL commands (split on ';')
    sqlCommands = sqlFile.split(';')
    # Execute every command from the input file
    for command in sqlCommands:
        try:
            c.execute(command)
        except OperationalError, msg:
            print "Command skipped: ", msg
df = executescriptsfromfile(sqlpath)
InformationsquelleAutor scoloe | 2017-10-11

1 Comentario

  1. 16

    Tengo una solución que podría funcionar para usted. Debe darle un poco agradable pandas.DataFrame.

    Primer lugar, usted tiene que leer la consulta dentro del archivo sql. Utilice sólo los pd.read_sql_query() en lugar de pd.read_sql()

    Estoy seguro de que usted lo sepa, pero aquí está el doc de la función: http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.read_sql_query.html#pandas.read_sql_query

    # Read the sql file
    query = open('filename.sql', 'r')
    
    # connection == the connection to your database, in your case prob_db
    DF = pd.read_sql_query(query.read(),connection)

    Puedo asegurar que es trabajar con T-SQL, pero no la usé nunca con MySQL.

    • Puedo confirmar esto funciona perfectamente en MySQL. Muchas gracias 🙂
    • Podría usted explicar cómo se puede configurar el connection? ¿Cuál es la forma más sencilla de configuración local temporales de conexión de SQL?
    • la conexión se puede realizar a la base de datos, por ejemplo, para una base de datos de Oracle el uso de: connection = cx_Oracle.connect(dsn = "DBCON.LD")

Dejar respuesta

Please enter your comment!
Please enter your name here