Hola a todos,

Una de las "latas" que tengo que sufrir a diario es exportar datos desde mis bases de datos y luego importarlos en excel/libreoffice. Esto no es demasiado problemático pues la exportación de csv es muy transparente. Pero he querido dar un paso más allá y hacerme algo que exporte directamente a excel.

De manera que me he cogido mis conocimientos de python y me he liado con plpythonu para crear la siguiente función:

DROP FUNCTION IF EXISTS exportax(varchar,varchar);
CREATE FUNCTION exportax(tabla varchar,filename varchar) RETURNS void
AS
$BODY$
import pandas as pd
import os


queryText=('select * from %s' %args[0])
ejecucion = plpy.execute(queryText)
tabla=[]

for fil in ejecucion:
  tabla+=[fil]

df=pd.DataFrame(tabla)
df.to_excel(filename,index=False,encoding='utf8')
os.chmod(filename,0o666)

plpy.notice('Se grabaron %s filas en el archivo %s' %(ejecucion.nrows(),filename))
$BODY$
LANGUAGE plpythonu;


Ahora bien, observaréis el comand os.chmod casi al final del script. Eso lo hago (¿es una trampa?) para que luego el archivo resultante pueda ser leído por cualquier usuario (pasa igual que con los problemas de permisos del comando COPY del servidor), ahora bien... *lo que no consigo es guardar el archivo en una carpeta cualquiera, pues da problemas de permisos. ¿Alguna idea para resolver esto?* (aparte de crear una carpeta en /home y darle permisos de escritura al usuario postgres)

Otra cosa pendiente es que el orden de los campos se pierde... pero como primera aproximación no está mal...

Un saludo

Jorge Tornero

Responder a