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 Fri 05 July 2013 12:05

Arnaud Buisson
Juste Inscrit !
Lieu: Pont-a-Mousson
Date d'inscription: 3 Sep 2007
Messages: 2

passer une liste de tables postgis par paramètre

bonjour,
je cherche à reproduire le comportement décrit ici :
http://fmepedia.safe.com/articles/How_T … Parameters

mais en connectant une base postgis (sur le même modèle que la connecion oracle). l'idée serait de laisser l'utilisateur sélectionner un ou plusieurs schémas à traiter sans pour autant lire l'intégralité des features de la base
pour tout vous avouer je ne suis pas super calé en python. quelqu'un aurait il une piste pour un script de connexion postgis en python (ou tcl je ne suis pas sectaire)
merci d'avance
Arnaud

Hors ligne

 

#2 Mon 08 July 2013 16:47

Arnaud Buisson
Juste Inscrit !
Lieu: Pont-a-Mousson
Date d'inscription: 3 Sep 2007
Messages: 2

Re: passer une liste de tables postgis par paramètre

j'ai finalement trouvé. Si ça intéresse quelqu'un voila le code python:

import psycopg2
import fmeobjects


#set up connection

liste=FME_MacroValues['liste_schema'] #pointe sur le paramètre choix multiple public qui permet de sélectionner les schémas a traiter

db=psycopg2.connect (host='****',user='***',dbname='***',password='***')
cursor=db.cursor()
   
#set up query
clause_schema=" and (table_schema='"
for line in liste.split(' '):
    clause_schema += (line)
    if line!=liste.split(' ')[-1]:
        clause_schema += ("' or table_schema='")
   
clause_schema+=("')")
   
query="select * from information_schema.tables where table_type='BASE TABLE' +clause_schema
   
cursor.arraysize = 250 
cursor.execute(query)
featureTypes=""
   
for row in cursor:
    featureTypes +=(' ' + row[1]+"."+row[2])
cursor.close()
db.close()
return featureTypes


pour lancer ce script il faut installer psycopg2 disponible ici pour windows :
http://www.stickpeople.com/projects/python/win-psycopg/
(remplacer le ".exe" par ".zip" et coller le repertoire psycopg2 dans le lib du repertoire python27 de fme...)

pour le reste suivre le tuto Fmepedia en remplacant l'exemple avec oracle par ce script
bonne journée

Hors ligne

 

#3 Tue 09 July 2013 07:35

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1021
Site web

Re: passer une liste de tables postgis par paramètre

merci pour le partage


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#4 Mon 10 August 2015 16:57

jonathan
Participant assidu
Date d'inscription: 16 May 2006
Messages: 263

Re: passer une liste de tables postgis par paramètre

Bonjour,

J'ai utilisé ce fil pour réaliser un projet similaire basé sur postgis.

J'ai adapté le script afin d'avoir de l'interaction avec l'utilisateur cependant je ne parviens plus à récupérer le résultat du script pour la poursuite des traitements.

Le script est composé de plusieurs fonctions. La fonction traitement est censée initier les traitements dans l'interface fme cependant lorsque j'y copie la ligne "return résultat", il ne se passe rien, la fenêtre de log m'affiche la ligne correctement mais impossible d'utiliser la valeur dans un transformer.

J'ai essayé d'utiliser pyoutput comme mentionné sur cette page https://knowledge.safe.com/articles/How … FME-Basics mais sans succès. Je n'arrive pas associer cette méthode à un module...

Voici un peu la façon dont mon code est agencé.

Code:

import psycopg2
import fmeobjects
import sys
import PyQt4
import signal
from PyQt4 import QtCore, QtGui

class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()  
        self.initUI()
    def initUI(self):
        *****
        self.show()
    def selection(self):
         ****
    def valide(self):
          ****  
    def traitement(self, selection):
          return resultat #Fonctionne pas
          ****  
def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
if __name__ == '__main__':
    main()

Merci d'avance à celui ou celle qui me mettra sur la voie

Dernière modification par jonathan (Mon 10 August 2015 17:12)

Hors ligne

 

#5 Tue 11 August 2015 11:36

jonathan
Participant assidu
Date d'inscription: 16 May 2006
Messages: 263

Re: passer une liste de tables postgis par paramètre

En fait il suffisait d'utiliser une variable globale et de mettre le return resultat à la toute fin du script en dehors de la classe et des fonctions.

L'objet du script est de permettre à l'utilisateur de choisir dans geometry_columns les tables qu'il va vouloir manipuler. Si des personnes sont intéressées, je peut le mettre en ligne.

Salutations

Hors ligne

 

Pied de page des forums

Powered by FluxBB