Pages: 1
- Sujet précédent - QGIS 2.0/Postgresql 9.3 : créer une vue par le code python - Sujet suivant
#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
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
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
Pages: 1
- Sujet précédent - QGIS 2.0/Postgresql 9.3 : créer une vue par le code python - Sujet suivant