#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 finaleHors ligne
#2 Fri 19 November 2021 14:04
- neskuik01
- Participant assidu
- Date d'inscription: 16 Feb 2015
- Messages: 203
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


