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 :

gestion d'une table attributaire sous python


Sujet :

Python

  1. #1
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut gestion d'une table attributaire sous python
    salut,

    un résultat d'une requête sous python donne une table attributaire contenant des informations sur un type de céréale, dont le champ: production suivant la requête est contient que des zéro.

    ma question est:
    je voulais réaliser une condition comme suit: (table sde sous sqlserver)

    if hhh.DBO.Cereales.production == 0:
    instructions

    ça ne me donne rien.comment je peux procéder?

    remarque: données de ce champs sont de type Double


    j'espère que ma question est claire.

    thanks

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par noramokh Voir le message
    salut,

    un résultat d'une requête sous python donne une table attributaire contenant des informations sur un type de céréale, dont le champ: production suivant la requête est contient que des zéro.

    ma question est:
    je voulais réaliser une condition comme suit: (table sde sous sqlserver)

    if hhh.DBO.Cereales.production == 0:
    instructions

    ça ne me donne rien.comment je peux procéder?

    remarque: données de ce champs sont de type Double


    j'espère que ma question est claire.

    thanks
    Bonjour,

    Pourriez-vous publier le code contenant ET la requête SQL ET le test qui pose problème ?

    Merci.

    @+.

  3. #3
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    voici la requête et le test:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    req0="Select OBJECTID,CodeCommuneFK,Production,Rendement,Superficie,TypeCereales,AnneeAgricole,Trimestre  FROM hhh.DBO.CerealesHiver  Where TypeCereales=""'"+c+"'"" AND AnneeAgricole=""'"+a1+"'""AND Trimestre=""'"+v4+"'" 
    arcpy.CreateDatabaseView_management(BD_SIGMSA4, "CerHiv"+c+a1+"T"+v4, req0)
     
    if "hhh.DBO.CerHiv"+c+a1+"T"+v4+".Production" == '0':
          print "Zéro"
          tkMessageBox.showinfo("Information", " Il n'y a pas de production de ce type de culture dans ce trimestre") 
     
    elif "hhh.DBO.CerHiv+"+c+a1+"T"+v4+".Production" != '0':
     
            req1="Select Shape,CodeCommuneFK,NomCommune,Production,Rendement,Superficie,TypeCereales,AnneeAgricole,Trimestre  FROM hhh.DBO.Communes,hhh.DBO.CerHiv"+c+a1+"T"+v4+"  Where CodeCommune=CodeCommuneFK "
            arcpy.MakeQueryLayer_management(BD_SIGMSA4, "carteCerHiv"+c+a1+"T"+v4, req1)
            print "done"
    j'ai eu le résultat de l'outil createdatabaseview, mais le test n'affiche rien.pas d'erreur signalée

    merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par noramokh Voir le message
    voici la requête et le test:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    req0="Select OBJECTID,CodeCommuneFK,Production,Rendement,Superficie,TypeCereales,AnneeAgricole,Trimestre  FROM hhh.DBO.CerealesHiver  Where TypeCereales=""'"+c+"'"" AND AnneeAgricole=""'"+a1+"'""AND Trimestre=""'"+v4+"'" 
    arcpy.CreateDatabaseView_management(BD_SIGMSA4, "CerHiv"+c+a1+"T"+v4, req0)
     
    if "hhh.DBO.CerHiv"+c+a1+"T"+v4+".Production" == '0':
          print "Zéro"
          tkMessageBox.showinfo("Information", " Il n'y a pas de production de ce type de culture dans ce trimestre") 
     
    elif "hhh.DBO.CerHiv+"+c+a1+"T"+v4+".Production" != '0':
     
            req1="Select Shape,CodeCommuneFK,NomCommune,Production,Rendement,Superficie,TypeCereales,AnneeAgricole,Trimestre  FROM hhh.DBO.Communes,hhh.DBO.CerHiv"+c+a1+"T"+v4+"  Where CodeCommune=CodeCommuneFK "
            arcpy.MakeQueryLayer_management(BD_SIGMSA4, "carteCerHiv"+c+a1+"T"+v4, req1)
            print "done"
    j'ai eu le résultat de l'outil createdatabaseview, mais le test n'affiche rien.pas d'erreur signalée

    merci
    Ah ? Et où est-ce que vous récupérez le résultat de votre requête ? Dans quelle variable ?

  5. #5
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    le résultat est une table attributaire s'appelle "CerHiv"+c+a1+"T"+v4, elle s'affiche directement sur arcmap.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par noramokh Voir le message
    le résultat est une table attributaire s'appelle "CerHiv"+c+a1+"T"+v4, elle s'affiche directement sur arcmap.
    Ce n'est rien d'autre qu'une chaîne de caractère: un nom qui désigne la View que construit ArcGis avec le SELECT.
    Pour accéder aux données, il faudra passer ce nom à une autre requête ArcGis.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ce n'est rien d'autre qu'une chaîne de caractère: un nom qui désigne la View que construit ArcGis avec le SELECT.
    Pour accéder aux données, il faudra passer ce nom à une autre requête ArcGis.

    - W
    Pas mieux ici, sinon peut-être jeter un oeil de ce côté-ci : http://help.arcgis.com/fr/arcgisdesk...00000071000000

    arcGIS ne semble pas franchement conçue pour brasser de la requête SQL en propre (c'est une base de données SIG = Systèmes d'Information Géographique).

    C'est plutôt une DB pour tracer des cartes, quoi.

    Bon courage.

    @+.

  8. #8
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ce n'est rien d'autre qu'une chaîne de caractère: un nom qui désigne la View que construit ArcGis avec le SELECT.
    Pour accéder aux données, il faudra passer ce nom à une autre requête ArcGis.

    - W
    lorsque j'utilise ce nom de la view dans une autre requête comme celle de l'outil MakeQuerylayer, ça fonctionne bien. j'ai déjà suivi cette manière.
    mais dans ce test, ne donne rien.
    question : comment peut on transférer un variable en un autre de type double? comme dans le cas de string : on met str()

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par noramokh Voir le message
    lorsque j'utilise ce nom de la view dans une autre requête comme celle de l'outil MakeQuerylayer, ça fonctionne bien. j'ai déjà suivi cette manière.
    mais dans ce test, ne donne rien.
    Encore une fois : parce que votre test correspond à quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if "toto" == "0": # c'est constant et TOUJOURS FAUX
        ...etc...

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par noramokh Voir le message
    question : comment peut on transférer un variable en un autre de type double? comme dans le cas de string : on met str()
    comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a = "10.33"
    b = float(a)
    print(b)

  11. #11
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a = "10.33"
    b = float(a)
    print(b)
    Est ce qu'il y a une méthode d'associer les enregistrements dans une colonne(champ) à une variable? comme ça peut être le test est fonctionne.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par noramokh Voir le message
    Est ce qu'il y a une méthode d'associer les enregistrements dans une colonne(champ) à une variable? comme ça peut être le test est fonctionne.
    Mais non, votre test NE PEUT PAS fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # vous créez une vue à partir d'une requête SQL
    # cette vue s'appelle, mettons "CerHivBle2012T4"
    # elle est créée dans la base de données
    # mais ensuite, il faut l'accéder à partir de votre script Python
    arcpy.CreateDatabaseView_management(BD_SIGMSA4, "CerHiv"+c+a1+"T"+v4, req0)
    Si vous faites un test qui dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if "CerHivBle2012T4" == "0":
    vous comparez en réalité deux chaînes de caractères entre elles et non pas le contenu de votre vue qui s'appellerait "CerHivBle2012T4", par exemple.

    jetez un oeil à cette adresse : http://help.arcgis.com/fr/arcgisdesk...00000071000000

    et voyez si arcpy.SelectLayerByAttribute_management() peut servir de quelque manière que ce soit.

    @+.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par noramokh Voir le message
    Est ce qu'il y a une méthode d'associer les enregistrements dans une colonne(champ) à une variable? comme ça peut être le test est fonctionne.
    Je viens de trouver ça (ça peut peut-être aider) : http://help.arcgis.com/fr/arcgisdesk...0000001r000000

    @+.

  14. #14
    Membre actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Points : 215
    Points
    215
    Par défaut
    Ah çà fait du bien de voir quelqu'un parlait aussi bien (il n'y a pas de fautes d'orthographes @wiztricks)
    _""""Cats have a big heart ^^ unlike some bad people (whose will never change in their brain) """

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    Je viens de trouver ça (ça peut peut-être aider) : http://help.arcgis.com/fr/arcgisdesk...0000001r000000

    @+.
    Après avoir (un peu) enquêté sur arcGIS, je viens de découvrir l'objet arcpy.SearchCursor() qui, me semble-t-il, sera plus approprié pour ce que vous voulez faire.

    Documentation arcpy.SearchCursor() : http://help.arcgis.com/fr/arcgisdesk...00000039000000

    Exemple :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import arcpy
    import tkMessageBox
     
    # objet SearchCursor()
    # voir http://help.arcgis.com/fr/arcgisdesktop/10.0/help/index.html#//000v00000039000000
     
    # on crée un curseur de recherche en lecture seule
    # on récupère les enregistrements dans rows
     
    rows = arcpy.SearchCursor(
     
        # DB Table
        "hhh.DBO.CerealesHiver",
     
        # where clause
        "TypeCereales='{tc}' AND AnneeAgricole='{aa}' AND Trimestre='{tr}'"
        .format(tc=c, aa=a1, tr=v4),
     
        # spatial_reference (keep empty)
        "",
     
        # select fields
        "OBJECTID, CodeCommuneFK, Production, Rendement, Superficie, "
        "TypeCereales, AnneeAgricole, Trimestre",
    )
     
    # on parcourt les enregistrements trouvés
    for row in rows:
     
        if not row.Production:
     
            print "Zéro"
     
            tkMessageBox.showinfo(
                "Information",
                "Il n'y a pas de production de ce type "
                "de culture dans ce trimestre."
            )
     
        else:
     
            # nouvelle requête
            rows2 = arcpy.SearchCursor(
     
                # DB Tables
                "hhh.DBO.Communes, hhh.DBO.CerHiv{}T{}".format(c+a1, v4),
     
                # where clause
                "CodeCommune = CodeCommuneFK",
     
                # spatial reference (keep empty)
                "",
     
                # select fields
                "Shape, CodeCommuneFK, NomCommune, Production, "
                "Rendement, Superficie, TypeCereales, AnneeAgricole, "
                "Trimestre",
            )
     
            # on parcourt les enregistrements trouvés
            for row2 in rows2:
     
                # ...etc...
                pass
     
            # end for
     
        # end if
     
    # end for
    Je n'ai évidemment pas arcGIS chez moi pour tester, mais je pense que cela devrait fonctionner (à quelques réglages près).

    Je trouvais ça bizarre de ne pas recourir à des curseurs pour obtenir des enregistrements d'une requête SQL.

    @+.

  16. #16
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    Après avoir (un peu) enquêté sur arcGIS, je viens de découvrir l'objet arcpy.SearchCursor() qui, me semble-t-il, sera plus approprié pour ce que vous voulez faire.

    Documentation arcpy.SearchCursor() : http://help.arcgis.com/fr/arcgisdesk...00000039000000

    Exemple :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    import arcpy
    import tkMessageBox
     
    # objet SearchCursor()
    # voir http://help.arcgis.com/fr/arcgisdesktop/10.0/help/index.html#//000v00000039000000
     
    # on crée un curseur de recherche en lecture seule
    # on récupère les enregistrements dans rows
     
    rows = arcpy.SearchCursor(
     
        # DB Table
        "hhh.DBO.CerealesHiver",
     
        # where clause
        "TypeCereales='{tc}' AND AnneeAgricole='{aa}' AND Trimestre='{tr}'"
        .format(tc=c, aa=a1, tr=v4),
     
        # spatial_reference (keep empty)
        "",
     
        # select fields
        "OBJECTID, CodeCommuneFK, Production, Rendement, Superficie, "
        "TypeCereales, AnneeAgricole, Trimestre",
    )
     
    # on parcourt les enregistrements trouvés
    for row in rows:
     
        if not row.Production:
     
            print "Zéro"
     
            tkMessageBox.showinfo(
                "Information",
                "Il n'y a pas de production de ce type "
                "de culture dans ce trimestre."
            )
     
        else:
     
            # nouvelle requête
            rows2 = arcpy.SearchCursor(
     
                # DB Tables
                "hhh.DBO.Communes, hhh.DBO.CerHiv{}T{}".format(c+a1, v4),
     
                # where clause
                "CodeCommune = CodeCommuneFK",
     
                # spatial reference (keep empty)
                "",
     
                # select fields
                "Shape, CodeCommuneFK, NomCommune, Production, "
                "Rendement, Superficie, TypeCereales, AnneeAgricole, "
                "Trimestre",
            )
     
            # on parcourt les enregistrements trouvés
            for row2 in rows2:
     
                # ...etc...
                pass
     
            # end for
     
        # end if
     
    # end for
    Je n'ai évidemment pas arcGIS chez moi pour tester, mais je pense que cela devrait fonctionner (à quelques réglages près).

    Je trouvais ça bizarre de ne pas recourir à des curseurs pour obtenir des enregistrements d'une requête SQL.

    @+.
    bonjour,

    je ne sais pas pourquoi je n'ai pas pensé au curseur. vraiment j'étais bloqué

    merci tarball69, merci d'avoir me donner un peu de votre temps.
    le problème est résolu à l'aide SearchCursor:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     rows=arcpy.SearchCursor("hhh.DBO.CerHiv"+c+a1+"T"+v4,"[Production]=0")
                      i=0
                      for row in rows:
                          i=i+1
                      print i
                      if i==32:
                            tkMessageBox.showinfo("Information", " Il n'y a pas de production de ce type de culture dans ce trimestre")
    32 est le nombre de communes
    merci infiniment

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par noramokh Voir le message
    bonjour,

    je ne sais pas pourquoi je n'ai pas pensé au curseur. vraiment j'étais bloqué

    merci tarball69, merci d'avoir me donner un peu de votre temps.
    le problème est résolu à l'aide SearchCursor:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     rows=arcpy.SearchCursor("hhh.DBO.CerHiv"+c+a1+"T"+v4,"[Production]=0")
                      i=0
                      for row in rows:
                          i=i+1
                      print i
                      if i==32:
                            tkMessageBox.showinfo("Information", " Il n'y a pas de production de ce type de culture dans ce trimestre")
    32 est le nombre de communes
    merci infiniment
    Bonjour,

    Est-ce que len(rows) ne fonctionne pas dans le cas d'un SearchCursor() ?

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    rows = arcpy.SearchCursor("hhh.DBO.CerHiv"+c+a1+"T"+v4,"[Production]=0")
     
    if len(rows) >= 32:
     
        tkMessageBox.showinfo(
            "Information",
            "Il n'y a pas de production de ce type de culture dans ce trimestre"
        )
     
    # end if
    Pensez à cliquer si votre problème a trouvé solution ou si la discussion est close.

    @+.

  18. #18
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    Bonjour,

    Est-ce que len(rows) ne fonctionne pas dans le cas d'un SearchCursor() ?

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    rows = arcpy.SearchCursor("hhh.DBO.CerHiv"+c+a1+"T"+v4,"[Production]=0")
     
    if len(rows) >= 32:
     
        tkMessageBox.showinfo(
            "Information",
            "Il n'y a pas de production de ce type de culture dans ce trimestre"
        )
     
    # end if
    Pensez à cliquer si votre problème a trouvé solution ou si la discussion est close.

    @+.
    non, ça ne donne pas.
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/12/2006, 10h31
  2. [MySQL] Gestion d'une table
    Par manud59 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 04/06/2006, 18h53
  3. Suppression Elément d'une table à partir sous formulaire
    Par Daniel MOREAU dans le forum Access
    Réponses: 3
    Dernier message: 19/05/2006, 10h57
  4. Mécansime pour reproduire la gestion d'une table
    Par sinfoni dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2006, 12h25
  5. Une table --> 2 sous formulaires d'édition ?
    Par Neilos dans le forum IHM
    Réponses: 2
    Dernier message: 20/06/2005, 16h10

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