IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Créer une table Qgis depuis un script python


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Fibre Optique - Déploiement FTTH
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Fibre Optique - Déploiement FTTH

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Créer une table Qgis depuis un script python
    Bonsoir à tous
    Je suis novice en python

    je souhaite simplement transvaser sur Qgis un résultat récupéré depuis une requête Postgresql
    le résultat doit être une table Qgis


    Pour cela je voudrais écrire un script python

    Après l'import des différents modules
    je passe d'abord par une connexion à une base de données Postgresql
    puis je créer une couche vecteur
    le but ensuite est de transvaser le résultat de la requête Sql
    vers une liste puis vers la couche Qgis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
     
    import psycopg2
    import psycopg2.extras
    import os
    from qgis.core import *
    from qgis.utils import iface
    from PyQt4.QtCore import*
    import processing
     
    Host = serveur
    DBname = bdd
    schema = Schema
    User = login
    Password = mot_de_passe
    Folder=Dossier
     
    conn_string = "host='"+Host+"' dbname='"+DBname+"' user='"+User+"' password='"+Password+"'"
    conn = psycopg2.connect(conn_string)
    cursor = conn.cursor()
     
     
    uri1='None'
    EtiQuet = QgsVectorLayer(uri1,"EtiQuet","memory")
    pr = EtiQuet.dataProvider()
    EtiQuet.startEditing()
    pr.addAttributes([QgsField("section",QVariant.String),QgsField("code_cb",QVariant.String),QgsField("capacite",QVariant.Int),QgsField("nb_etiq",QVariant.Int) ])
     
     
    requete1 ="SELECT * FROM pm996.cb"
    cursor.execute(requete1)
    resultats = cursor.fetchall()
     
     
    valeurs = [] 
    valeurs.append(resultats)
     
    i=0
    for i in range (0,len(valeurs)):
        feat=QgsFeature()
        feat.setAttributes([valeurs[i][0],valeurs[i][1],valeurs[i][2],valeurs[i][3]])
        pr.addFeatures([feat])
        EtiQuet.commitChanges() 
    i=i+1
     
    layer_sp=QgsMapLayerRegistry.instance().addMapLayer(EtiQuet)
    QgsVectorFileWriter.writeAsVectorFormat(layer_sp, Folder+ '\\'+schema+'.xlsx', 'utf8', None, 'XLSX')
     
    conn.commit()
    cursor.close()
    conn.close()

    merci de votre aide
    Cd

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 911
    Points : 7 294
    Points
    7 294
    Par défaut
    Bonjour,

    Quelles sont vos questions ?

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par passby Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Host = serveur
    DBname = bdd
    schema = Schema
    User = login
    Password = mot_de_passe
    Folder=Dossier
    A quoi sert de transvaser des variables dans d'autres variables ??? Quelle est la plus-value de cette opération???

    Citation Envoyé par passby Voir le message
    conn_string = "host='"+Host+"' dbname='"+DBname+"' user='"+User+"' password='"+Password+"'"
    conn_string="host='%s' dbname='%s' user='%s' password='%s'" % (serveur, bdd, login, mot_de_passe)...

    Citation Envoyé par passby Voir le message
    conn = psycopg2.connect(conn_string)
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    conn_dict={
    	"host" : serveur,
    	"dbname" : bdd,
    	"user" : login,
    	"password" : mot_de_passe,
    }
    conn = psycopg2.connect(conn_dict)

    Citation Envoyé par passby Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    resultats = cursor.fetchall()
    valeurs = [] 
    valeurs.append(resultats)
    Même question qu'au début: "resultats" contient déjà le résultat. Quel besoin as-tu de le transférer dans "valeurs"? Quand tu vas acheter un truc, est-ce que tu transfères tes pièces du portefeuille à la poche gauche, puis de la poche gauche à la poche droite, puis de la poche droite au marchand ; ou bien donnes-tu directement l'argent du portefeuille vers le marchand?
    D'autant plus que là ça a un double effet de merde. "resultats" étant déjà un tableau, tu ajoutes donc un tableau dans un tableau => au final "valeurs" est un tableau 2D dont la première dimension ne contient qu'un seul élément.

    Citation Envoyé par passby Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    i=0
    for i in range (0,len(valeurs)):
    	...
    i=i+1
    Ah ça c'est joli !!! Soit tu n'as pas compris ce que représente un for i in iterable, soit c'est moi qui n'ai pas compris pourquoi tu incrémentes "i" une fois la boucle finie. Mais comme "i" n'est plus utilisé ensuite...

    Citation Envoyé par passby Voir le message
    Je suis novice en python
    Tout est là. Ce n'est pas une tare, on l'a tous été à un moment. Sauf que nous on a pris le temps de lire un tuto pour assimiler les bases avant de se lancer dans des trucs un peu complexes. Et ensuite ce temps "pris" on l'a récupéré au centuple.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Fibre Optique - Déploiement FTTH
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Fibre Optique - Déploiement FTTH

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Re Bonjour

    Bon c'est vrai que j'étais un peu rapide en postant le code python du premier message
    My bad, my bad ...

    conn_string="host='%s' dbname='%s' user='%s' password='%s'" % (serveur, bdd, login, mot_de_passe)...
    Ok je vais garder ça

    en faite je voulais surtout avoir des précisions sur la suite du code à partir de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    requete1 ="SELECT * FROM pm996.cb"
    cursor.execute(requete1)
    resultats = cursor.fetchall()
    Comment le tableau résultats peut être ajouté à une table Qgis ?
    voilà ma question

    Ce code est à la base un code que j'ai récupéré, et j'en suis désolé si la syntaxe vous as donné la nausée ^^
    sO sOrry o0

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 352
    Points : 36 879
    Points
    36 879
    Par défaut
    Salut,

    Citation Envoyé par passby Voir le message
    Comment le tableau résultats peut être ajouté à une table Qgis ?
    Ajouter une liste de listes de je ne sais quoi à une table attributaire QGIS n'est pas un sujet de programmation Python mais QGIS (et vous devez certainement avoir des forums plus appropriés).

    - W

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Fibre Optique - Déploiement FTTH
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Fibre Optique - Déploiement FTTH

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    un sujet de programmation Python mais QGIS
    daccorrrd..
    j'imagine j'ai d'ailleurs posé le même message sur Geo Rezo
    Même une utilisation de QgsFeature() , setAttributes , addMapLayer est proscrite à l'intérieur ?

    "Vous êtes mon seul espoir " OH EEEEHH

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Fibre Optique - Déploiement FTTH
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Fibre Optique - Déploiement FTTH

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Après quelques recherches, j'ai simplifié le code mais ..
    je suis toujours confronté à ce problème : comment ajouter le résultat de la requête postgres à ma couche Qgis
    la table retournée est vide .. ::)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    sqlQuery = "DROP TABLE IF EXISTS tabl  .... SELECT * FROM tabl;"
    cursor.execute(sqlQuery)
    result=cursor.fetchall()
    #resultat postgres
     
    uri1='None'
    EtiQuet = QgsVectorLayer(uri1,"EtiQuet","memory")
    EtiQuet.startEditing()
    EtiQuet.dataProvider().addAttributes([QgsField("section",QVariant.String), QgsField("code_cb",QVariant.String),  QgsField("capacite",QVariant.Int),  QgsField("nb_etiq",QVariant.Int)]
    EtiQuet.dataProvider().addFeatures(result)
    #Couche vecteur éditée en mémoire et création des champs
     
    #boucle pour intégrer le résultat postgres dans la couche vecteur (sans géométrie)
    for i in range (0,len(result)):
        feat=QgsFeature()
        feat.setAttributes([result[i][0],result[i][1],result[i][2],result[i][3]])
        EtiQuet.dataProvider().addFeatures([feat])
        EtiQuet.commitChanges() 
     
     
    layer_sp=QgsMapLayerRegistry.instance().addMapLayer(EtiQuet)

    Si quelqu'un à une idée,
    Je vous remercie :)

Discussions similaires

  1. Créer une table avec un script ou via l'ETL
    Par coulio dans le forum Alimentation
    Réponses: 1
    Dernier message: 02/08/2011, 14h34
  2. [AC-2003] Créer une table dans base dorsale depuis la frontale
    Par buzz73 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 21/01/2010, 11h40
  3. script linux pour créer une table sur Oracle
    Par ledawa dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 19/08/2008, 11h29
  4. Réponses: 2
    Dernier message: 08/03/2007, 10h50
  5. Créer une table à partir d'une autre dans un script
    Par Dam)rpgheaven dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 24/06/2005, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo