Saltar al contenido

copiar datos de csv a postgresql usando python

Solución:

Utilizar el copy_from método del cursor

f = open(r'C:UsersnDesktopdata.csv', 'r')
cur.copy_from(f, temp_unicommerce_status, sep=',')
f.close()

El archivo debe pasarse como un objeto.

Dado que está haciendo frente a un archivo csv, es necesario especificar el separador, ya que el valor predeterminado es un carácter de tabulación

La forma en que resolví este problema en particular para usar la función de clase de cursor psychopg2 copy_expert (Docs: http://initd.org/psycopg/docs/cursor.html). copy_expert le permite usar STDIN, por lo tanto, eludiendo la necesidad de emitir un privilegio de superusuario para el usuario de postgres. Su acceso al archivo depende del acceso del usuario del cliente (linux / windows / mac) al archivo.

De Postgres COPY Docs (https://www.postgresql.org/docs/current/static/sql-copy.html):

No confunda COPY con la instrucción psql copy. copy invoca COPY FROM STDIN o COPY TO STDOUT, y luego recupera / almacena los datos en un archivo accesible para el cliente psql. Por lo tanto, la accesibilidad y los derechos de acceso a los archivos dependen del cliente y no del servidor cuando se usa copy.

También puede dejar los permisos establecidos estrictamente para acceder a la carpeta de inicio de development_user y la carpeta de la aplicación.

csv_file_name="/home/user/some_file.csv"
sql = "COPY table_name FROM STDIN DELIMITER '|' CSV HEADER"
cursor.copy_expert(sql, open(csv_file_name, "r"))

#sample of code that worked for me

import psycopg2 #import the postgres library

#connect to the database
conn = psycopg2.connect(host="localhost",
                       dbname="database1",
                       user="postgres",
                       password='****',
                       port="****")  
#create a cursor object 
#cursor object is used to interact with the database
cur = conn.cursor()

#create table with same headers as csv file
cur.execute("CREATE TABLE IF NOT EXISTS test(**** text, **** float, **** float, **** 
text)")

#open the csv file using python standard file I/O
#copy file into the table just created 
with open('******.csv', 'r') as f:
next(f) # Skip the header row.
    #f , <database name>, Comma-Seperated
    cur.copy_from(f, '****', sep=',')
    #Commit Changes
    conn.commit()
    #Close connection
    conn.close()


f.close()
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *