#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