Quantcast
Channel: Forum SIG - Systèmes d'Information Géographique et Géomatique
Viewing all articles
Browse latest Browse all 8030

[QGIS 2.x] pyQgis : lien QGIS/PostGis -Erreur avec QgsDataSourceURI()

$
0
0
Bonjour à tous,

Je souhaite faire le lien entre ma base de donnée PostGis et QGIS pour un plugin que je developpe. Pour cela j'ai utilisé le tutoriel suivant :http://blog.georepublic.info/2013/jo...-using-pyqgis/

Ce tutoriel nous apprend à afficher les données d'une colonne géométrique de PostGIS dans QGIS via la création d'une couche. Dans mon cas le nombre de colonne géométrique dans la base de données qui risque de varier dans le temps et je ne veux pas réécrire une ligne de code à chaque nouvelle colonne créé.

Mes colonnes géométriques sont nommé en fonction de leur code epsg tel que :
geom_XXX geometry(PointZ,code_epsg) avec XX le code epsg

J'ai essayer de créer un court script sous python qui me créer par colonne un nouveau QgsDataSourceURI().

import psycopg2
import sys
try:
conn = psycopg2.connect("dbname='qgis_db' user='postgres' host='localhost' password='XXX'")
except:
print "I am unable to connect to the database"
cur = conn.cursor()
data= cur.execute("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='windturbine' AND COLUMN_NAME Like '%geom%'")
data = cur.fetchall()
uri_liste =[]
layer_liste =[]
for i in data:
uri_liste.append("uri_%s"%(i))
layer_liste.append("layer_%s"%(i))
for i in uri_liste:
i =QgsDataSourceURI()
for i in uri_liste:
for j in data:
cur.execute("%s.setDataSource('public', 'windturbine', %s)"%(i, j))
layer = QgsVectorLayer(uri%s.uri(), "layer_%s", "postgres")%(i,i)


Lorsque j'execute ce code dans ma console python de QGIS, j'ai une erreur de syntaxe :

File "<input>", line 1, in <module>
File "C:/Users/AUGU/Desktop/Sans titre 2.py", line 22, in <module>
cur.execute("%s.setDataSource('public', 'windturbine', %s)"%(i, j))
ProgrammingError: FEHLER: Syntaxfehler bei „uri_geom_2166“
LINE 1: uri_geom_2166.setDataSource('public', 'windturbine', (u'geom...


Auriez vous une idée de comment résoudre mon problème ?

Merci d'avance !

Viewing all articles
Browse latest Browse all 8030

Trending Articles