es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

psycopg2 exporta la base de datos a un archivo CSV incluyendo los nombres de las columnas.

Estoy utilizando psycopg2 para conectarme a la base de datos de Postgre y exportar los datos a un archivo CSV.

Así es como hago la exportación de la base de datos a CSV:

def export_table_to_csv(self, table, csv_path):
    sql = "COPY (SELECT * FROM %s) TO STDOUT WITH CSV DELIMITER ','" % table
    self.cur.execute(sql)

    with open(csv_path, "w") as file:
        self.cur.copy_expert(sql, file)

Pero los datos solo incluyen las filas, sin los nombres de las columnas.

¿Cómo puedo exportar los datos con los nombres de las columnas?

P.D. Puedo imprimir los nombres de las columnas:

sql = 'SELECT * FROM test'
self.cur.execute(sql)
column_names = [desc[0] for desc in self.cur.description]
for i in column_names:
    print(i)

Quiero la manera más limpia de exportar los datos de la base de datos con los nombres de las columnas (es decir, prefiero hacer esto en un solo método, y no renombrar las columnas en retrospectiva).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para exportar los datos con los nombres de las columnas, puedes modificar la consulta SQL para incluir los encabezados de las columnas como la primera fila del archivo. Aquí está el código modificado:

    def exportar_tabla_a_csv(self, tabla, ruta_csv):
        # Obtener nombres de las columnas
        sql_columnas = "SELECT column_name FROM information_schema.columns WHERE table_name = %s;"
        self.cur.execute(sql_columnas, (tabla,))
        nombres_columnas = [desc[0] for desc in self.cur.fetchall()]
    
        # Exportar datos a CSV
        sql_datos = "COPY (SELECT * FROM %s) TO STDOUT WITH CSV HEADER DELIMITER ','"
        self.cur.copy_expert(sql_datos % tabla, open(ruta_csv, "w"))
    

    La primera consulta SQL (sql_columnas) recupera los nombres de las columnas de la tabla information_schema.columns para el nombre de tabla especificado. Luego, los nombres de las columnas se utilizan para construir la consulta COPY con la opción HEADER, que agrega los nombres de las columnas como la primera fila del archivo de salida.

    Ahora puedes llamar al método exportar_tabla_a_csv con el nombre de la tabla y la ruta deseada del archivo CSV para exportar los datos con los nombres de las columnas.

Comments are closed.