Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Tue 26 October 2021 18:02

Olivier Pompier
Participant occasionnel
Date d'inscription: 8 Sep 2013
Messages: 49

Inserer données dans une base PG avec psycopg2

Bonjour,

N'ayant pas trouvé d'équivalent, je me permets de déposer ce script permettant d'insérer des données (attributs + geometrie)issus d'un shape ou d'un autre format vecteur vers une base de données PG via psycopg2.
Dans mon cas , je suis passé par Python pour intégration dans un plugin.
C'est écrit avec peu d'élégance mais ça a le mérite d'être fonctionnel, toute suggestion de correction/amélioration est bienvenue

Code:

 try:
                   
     connection = psycopg2.connect(user="postgres",
                                                  password="postgres",
                                                  host="localhost",
                                                  port="5432",
                                                  database="db")

                    # Create a cursor to perform database operations
      cursor = connection.cursor()
      insertquery = "INSERT INTO table (champ1, champ2, geom) VALUES {} ".format(self.valSql(lyr))
      cursor.execute(insertquery)
      connection.commit()

      except (Exception, Error) as error:
                 
      self.iface.messageBar().pushMessage('Error while connecting to PostgreSQL')
finally:
       if (connection):
               cursor.close()
               connection.close()

    #
 def valSql(lyr):
        ''' retourne les valeurs placées dans la requête INSERT INTO '''
        l = []
        for feat in lyr.getFeatures():
            l.append('(')
            l.append(str((feat['CHAMP1'])) + ',')
            l.append(str((feat['CHAMP2'])) + ',')
            l.append('(ST_GeomFromText (\'' + feat.geometry().asWkt() + '\', 32631)))') # On assigne le SCR EPSG:32631 ou autre
            l.append(',')
            liste_vers_str_geom = ''.join(str(e) for e in l)
        return liste_vers_str_geom[:-1] # avec le -1 on se débarasse de la virgule finale

Hors ligne

 

#2 Fri 19 November 2021 14:04

neskuik01
Participant assidu
Date d'inscription: 16 Feb 2015
Messages: 193

Re: Inserer données dans une base PG avec psycopg2

Perso je traite les données avec Pandas et j'insère les données avec sqlAlchemy ce qui donne :

Code:

from sqlalchemy import create_engine,
engine = create_engine('postgresql://'+str(DB_USER)+':'+str(DB_PWD)+'@'+str(DB_HOST)+':'+str(DB_PORT)+'/'+str(DB_NAME))

dataFrame.to_sql('nomTable', schema='nomSchema', con=engine, index=False, if_exists='replace')

Hors ligne

 

Pied de page des forums

Powered by FluxBB