Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Thu 17 July 2014 13:36

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

QGIS 2.0/Postgresql 9.3 : créer une vue par le code python

bonjour

je travaille sur qgis 2.0  et postgresql 9.3, j'ai essayé de créer une vue depuis la console python de qgis par le code ci-dessous. il ne me signale pas une erreur mais quand j'ouvre la base de données dans postgresql je ne trouve pas la vue crée:

Code:

# -*- coding: cp1252 -*-
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui, QtSql
try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s
import psycopg2


con1=psycopg2.connect('host=localhost port=5432 dbname=stat user=postgres password=admin')
dbcur=con1.cursor()
dbcur.execute("select * from public.com")
dbcur1=con1.cursor()
dbcur1.execute("CREATE VIEW view1  As select * from public.com where nom='a'")

chaine=dbcur.fetchone
chaine1=dbcur1.fetchone

print "ok"
print "done"

Est ce que c'est faisable ce que je veux? quelle est le problème exactement?

merci

Hors ligne

 

#2 Thu 17 July 2014 15:38

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1220
Site web

Re: QGIS 2.0/Postgresql 9.3 : créer une vue par le code python

L'appel à la fonction commit() semble nécessaire pour clore la transaction.

Code:

import psycopg2
con1=psycopg2.connect('host=192.168.1.231 port=5432 dbname=totouser=dbuser password=tata')
dbcur=con1.cursor()
dbcur.execute("CREATE VIEW test_vue AS select * from public.perimetre LIMIT 1")
con1.commit()

http://wiki.postgresql.org/wiki/Talk:Using_psycopg2_with_PostgreSQL


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#3 Sun 20 July 2014 10:20

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: QGIS 2.0/Postgresql 9.3 : créer une vue par le code python

je vous remercie, effectivement c'est la fonction commit() qui manque

il fonctionne bien

Hors ligne

 

#4 Sun 20 July 2014 11:01

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: QGIS 2.0/Postgresql 9.3 : créer une vue par le code python

maintenant  je tente à afficher la vue avec une symbologie, le code est le suivant:

Code:

myVectorLayer = QgsVectorLayer("public.view2", "stat", 'ogr')
myTargetField = 'code'
myRangeList = []
myOpacity = 1
# Make our first symbol and range...
myMin = 0.0
myMax = 50.0
myLabel = 'Group 1'
myColour = QtGui.QColor('#ffee00')
mySymbol1 = QgsSymbolV2.defaultSymbol(myVectorLayer.geometryType())
mySymbol1.setColor(myColour)
mySymbol1.setAlpha(myOpacity)
myRange1 = QgsRendererRangeV2(myMin,myMax,mySymbol1,myLabel)
myRangeList.append(myRange1)
#now make another symbol and range...
myMin = 50.1
myMax = 100
myLabel = 'Group 2'
myColour = QtGui.QColor('#00eeff')
mySymbol2 = QgsSymbolV2.defaultSymbol(
           myVectorLayer.geometryType())
mySymbol2.setColor(myColour)
mySymbol2.setAlpha(myOpacity)
myRange2 = QgsRendererRangeV2(myMin,myMax,mySymbol2,myLabel)
myRangeList.append(myRange2)
myRenderer = QgsGraduatedSymbolRendererV2('', myRangeList)
myRenderer.setMode(QgsGraduatedSymbolRendererV2.EqualInterval)
myRenderer.setClassAttribute(myTargetField)

myVectorLayer.setRendererV2(myRenderer)
QgsMapLayerRegistry.instance().addMapLayer(myVectorLayer)

une erreur est généré :

Code:

mySymbol1.setColor(myColour)
AttributeError: 'NoneType' object has no attribute 'setColor'

RQ: stat= nom de la base de données


Est ce que vous pouvez m'aider?

merci

Hors ligne

 

#5 Mon 21 July 2014 09:31

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1220
Site web

Re: QGIS 2.0/Postgresql 9.3 : créer une vue par le code python

Bonjour,

avez vous testé votre code pas à pas dans la console python ?
Je passe la main sur ce problème qui dépasse mes compétences.


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#6 Mon 21 July 2014 09:55

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: QGIS 2.0/Postgresql 9.3 : créer une vue par le code python

bonjour

je vous remercie,
oui le code est bien fonctionné seulement cette partie de la symbologie.

cordialement

Hors ligne

 

#7 Tue 22 July 2014 03:14

Leyan
Participant assidu
Date d'inscription: 14 Oct 2013
Messages: 160

Re: QGIS 2.0/Postgresql 9.3 : créer une vue par le code python

Le message d'erreur indique que mySymbol1 est 'NoneType', donc ne contient pas vraiment de symbole. Du coup on ne peut pas lui appliquer de méthode.

Du coup il faut comprendre pourquoi est-ce que mySymbol1 n'a pas pu être créé. Est-ce que 'myVectorLayer.geometryType()' renvoie bien un type de géométrie valide ? (cela ne peut être que 0, 1 ou 2).

Hors ligne

 

#8 Wed 23 July 2014 15:17

nora 27
Participant actif
Date d'inscription: 15 Jul 2014
Messages: 59

Re: QGIS 2.0/Postgresql 9.3 : créer une vue par le code python

salut,

j'ai résolu le problème, l'erreur était dans l'instruction de qgsVectorLayer, j'ai mal indiqué la source de données. le vrai code est:


Code:

myVectorLayer = QgsVectorLayer(uri.uri(), "allcountries", 'postgres')

je vous remercie

Hors ligne

 

#9 Wed 23 July 2014 15:52

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1220
Site web

Re: QGIS 2.0/Postgresql 9.3 : créer une vue par le code python

Bonjour,

merci pour le retour.


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

Pied de page des forums

Powered by FluxBB