#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
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