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é ?

#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: 199

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