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