Bonsoir à tous
Je suis novice en python

je souhaite simplement transvaser sur Qgis un résultat récupéré depuis une requête Postgresql
le résultat doit être une table Qgis


Pour cela je voudrais écrire un script python

Après l'import des différents modules
je passe d'abord par une connexion à une base de données Postgresql
puis je créer une couche vecteur
le but ensuite est de transvaser le résultat de la requête Sql
vers une liste puis vers la couche Qgis

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
 
import psycopg2
import psycopg2.extras
import os
from qgis.core import *
from qgis.utils import iface
from PyQt4.QtCore import*
import processing
 
Host = serveur
DBname = bdd
schema = Schema
User = login
Password = mot_de_passe
Folder=Dossier
 
conn_string = "host='"+Host+"' dbname='"+DBname+"' user='"+User+"' password='"+Password+"'"
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
 
 
uri1='None'
EtiQuet = QgsVectorLayer(uri1,"EtiQuet","memory")
pr = EtiQuet.dataProvider()
EtiQuet.startEditing()
pr.addAttributes([QgsField("section",QVariant.String),QgsField("code_cb",QVariant.String),QgsField("capacite",QVariant.Int),QgsField("nb_etiq",QVariant.Int) ])
 
 
requete1 ="SELECT * FROM pm996.cb"
cursor.execute(requete1)
resultats = cursor.fetchall()
 
 
valeurs = [] 
valeurs.append(resultats)
 
i=0
for i in range (0,len(valeurs)):
    feat=QgsFeature()
    feat.setAttributes([valeurs[i][0],valeurs[i][1],valeurs[i][2],valeurs[i][3]])
    pr.addFeatures([feat])
    EtiQuet.commitChanges() 
i=i+1
 
layer_sp=QgsMapLayerRegistry.instance().addMapLayer(EtiQuet)
QgsVectorFileWriter.writeAsVectorFormat(layer_sp, Folder+ '\\'+schema+'.xlsx', 'utf8', None, 'XLSX')
 
conn.commit()
cursor.close()
conn.close()

merci de votre aide
Cd