Archive | junio 2017

Alimentar Tabla desde CSV usando Python


Hoy me enfrenté a la necesidad de alimentar una tabla de una BD de PostgreSQL usando archivos CSV (archivos QVD de Qlikview originalmente) y lo primero que traté de hacer fue generar el archivo CSV para importarlo a PostgreSQL pero algunos archivos estaban dando problemas y cuando es muy grande el CSV a importar, se hace más lento el proceso y el debug.

Desde Qlikview se tenía que recorrer todo el archivo e insertar cada una de las filas generando el comando SQL manualmente. Recurrí a Python para hacer la tarea y el resultado fue hacer el proceso mucho más fácil y divertido. La solución es usar pandas y su conexión para postgreSQL (a través de sqlalchemy), aquí el script:

#!/usr/bin/python

import pandas
from sqlalchemy import create_engine

RUTA_CSV="/ruta/archivocsv/"
archivo="ArchivoCSV.csv"

def main():
#Usando Pandas
engine = create_engine('postgresql://USER:PASS@IP:PORT/BD')
archivocsv=pandas.DataFrame.from_csv(RUTA_CSV+archivo, sep='\t')
archivocsv.to_sql("TABLA", engine, if_exists='append', schema='esquema')

if __name__ == "__main__":
main()

Al utilizar DataFrame.from_csv se crea el dataframe de pandas usando el separador requerido.
Con la función to_sql se realiza la inserción en la BD en la TABLA especificada usando el esquema schema y con la opción if_exists=’append’ indicamos que en caso de la tabla existir en la BD y esquema especificados, se haga una inserción de datos.

De ésta forma fácilmente podemos hacer un volcado de la información de archivos planos a una BD PostgreSQL, si los archivos planos son demasiado pesados es conveniente hacer el proceso en lotes y allí pandas brinda una alternativa también.

Don’t Worry….Be Linux!!!