96 votes

Comment mettre à jour les lignes sélectionnées avec les valeurs d'un fichier CSV dans Postgres ?

J'utilise Postgres et j'aimerais faire une grande requête de mise à jour qui récupérerait à partir d'un fichier CSV, disons que j'ai une table qui a (id, banana, apple) .

J'aimerais exécuter une mise à jour qui modifie les bananes et non les pommes, chaque nouvelle banane et son identifiant seraient dans un fichier CSV.

J'ai essayé de regarder le site Postgres mais les exemples me tuent.

-1voto

Vous pouvez essayer le code ci-dessous écrit en python, le fichier d'entrée est le fichier csv dont vous souhaitez mettre à jour le contenu dans la table. Chaque ligne est divisée en fonction de la virgule, donc pour chaque ligne, la ligne [0] est la valeur sous la première colonne, la ligne [1] est la valeur sous la deuxième colonne, etc.

     import csv
    import xlrd
    import os
    import psycopg2
    import django
    from yourapp import settings
    django.setup()
    from yourapp import models


    try:
       conn = psycopg2.connect("host=localhost dbname=prodmealsdb 
       user=postgres password=blank")
       cur = conn.cursor()

       filepath = '/path/to/your/data_to_be_updated.csv'
       ext = os.path.splitext(filepath)[-1].lower()
       if (ext == '.csv'): 
          with open(filepath) as csvfile:
          next(csvfile)
          readCSV = csv.reader(csvfile, delimiter=',')
          for row in readCSV:
              print(row[3],row[5])
              cur.execute("UPDATE your_table SET column_to_be_updated = %s where 
              id = %s", (row[5], row[3]))
              conn.commit()
          conn.close()
          cur.close()

    except (Exception, psycopg2.DatabaseError) as error:
    print(error)
    finally:
    if conn is not None:
      conn.close()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X