Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

GEODATA DAYS 2024

#1 Thu 19 July 2012 11:52

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Comment exécuter une requête Python OGR avec SELECT WHERE

Je n’arrive pas à faire une sélection avec la commande SELECT.

Voici le code de mon fichier PYTHON:

Code:

import ogr
driver = ogr.GetDriverByName("ESRI Shapefile")
datasource = driver.Open("P:/w_PY/tmp/Code_Insee_Communes.shp")
layer = datasource.GetLayer()

#layer = layer.ExecuteSQL("SELECT * FROM Code_Insee_Communes WHERE NOM = Nantes")

print layer.GetName()
print layer.GetExtent()
print layer.GetFeatureCount()

Opérateur cartographique & DAO & PHP.

Hors ligne

 

#2 Thu 19 July 2012 12:07

Ludo
Participant assidu
Lieu: Messanges
Date d'inscription: 5 Sep 2005
Messages: 231
Site web

Re: Comment exécuter une requête Python OGR avec SELECT WHERE

ExecuteSQL est une fonction de l'objet DataSource pas Layer
Voir ici http://softlibre.free.fr/gdal/osgeo.ogr.html#DataSource
De plus ton paramètre WHERE n'est pas bon, il faut que tu encadres de quotes Nantes

Hors ligne

 

#3 Thu 19 July 2012 12:21

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: Comment exécuter une requête Python OGR avec SELECT WHERE

J'ai modifié le code

mais ça ne fonctionne toujours pas:

Code:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import ogr
driver = ogr.GetDriverByName("ESRI Shapefile")
DataSource = driver.Open("P:/w_PY/tmp/Code_Insee_Communes.shp")
layer = DataSource.ExecuteSQL(SELECT * FROM Code_Insee_Communes WHERE NOM = "Nantes")
layer = DataSource.GetLayer()

print layer.GetName()
print layer.GetExtent()
print layer.GetFeatureCount()

Dernière modification par michel56 (Thu 19 July 2012 12:24)


Opérateur cartographique & DAO & PHP.

Hors ligne

 

#4 Thu 19 July 2012 12:30

Ludo
Participant assidu
Lieu: Messanges
Date d'inscription: 5 Sep 2005
Messages: 231
Site web

Re: Comment exécuter une requête Python OGR avec SELECT WHERE

tu dis que ça marche pas mais dis nous plutot ce que ça donne, erreur, résultat non attendu, etc
Pourquoi tu fais un
layer = DataSource.GetLayer() ?

Hors ligne

 

#5 Thu 19 July 2012 12:43

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: Comment exécuter une requête Python OGR avec SELECT WHERE

ça donne:

Code:

>>> execfile("P:/w_PY/test_org.py")
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "P:/w_PY/test_org.py", line 8
    layer = DataSource.ExecuteSQL(SELECT * FROM Code_Insee_Communes WHERE NOM = "Nantes")
                                                                  ^
SyntaxError: invalid syntax
>>>

Opérateur cartographique & DAO & PHP.

Hors ligne

 

#6 Thu 19 July 2012 14:09

Ludo
Participant assidu
Lieu: Messanges
Date d'inscription: 5 Sep 2005
Messages: 231
Site web

Re: Comment exécuter une requête Python OGR avec SELECT WHERE

Il manque les guillemets qui entourent la syntaxe sql

Code:

layer = DataSource.ExecuteSQL("SELECT * FROM Code_Insee_Communes WHERE NOM = 'Nantes'")

Hors ligne

 

#7 Thu 19 July 2012 15:54

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: Comment exécuter une requête Python OGR avec SELECT WHERE

Ok la requête fonctionne.

Merci.

Bon maintenant il faut afficher ça - Le code ne marche pas

Code:

for feature in layer:
    print GetFieldAsString("NOM")
print "\n"

C'est mon premier jour avec Python.

Dernière modification par michel56 (Thu 19 July 2012 15:55)


Opérateur cartographique & DAO & PHP.

Hors ligne

 

#8 Thu 19 July 2012 16:35

rouault
Participant assidu
Date d'inscription: 26 Apr 2009
Messages: 166

Re: Comment exécuter une requête Python OGR avec SELECT WHERE

Petite étourderie : il faut préciser l'objet auquel s'applique la méthode GetFieldAsString()

Code:

for feature in layer:
    print feature.GetFieldAsString("NOM")
print "\n"

Hors ligne

 

#9 Thu 19 July 2012 17:03

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: Comment exécuter une requête Python OGR avec SELECT WHERE

Merci


Opérateur cartographique & DAO & PHP.

Hors ligne

 

#10 Thu 19 July 2012 20:17

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: Comment exécuter une requête Python OGR avec SELECT WHERE

Impossible de grouper avec le champ NOM et un comptage d'enregistrement du regroupement.
J'ai essayer avec GROUP BY NOM également. En PHP je l'ai fait plusieurs fois sans problème mais en Python!

Code:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import ogr 
driver = ogr.GetDriverByName("ESRI Shapefile")
DataSource = driver.Open("/home/michel/Documents/Code_Insee_Communes.shp")
layer = DataSource.ExecuteSQL("SELECT COUNT(DISTINCT NOM) AS 'Nb_NOM', NOM FROM Code_Insee_Communes ORDER BY NOM DESC")#WHERE NOM = 'Nantes'

print layer.GetName()
print layer.GetExtent()
print layer.GetFeatureCount()

for feature in layer:
    print feature.GetFieldAsString("NOM")
    print feature.GetFieldAsString("Nb_NOM")

print "*******************************"

Message:
>>> execfile("/home/michel/Documents/TEST_PYTHON/test_org.py")
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/home/michel/Documents/TEST_PYTHON/test_org.py", line 11, in <module>
    print layer.GetName()
AttributeError: 'NoneType' object has no attribute 'GetName'
>>>

Dernière modification par michel56 (Thu 19 July 2012 20:23)


Opérateur cartographique & DAO & PHP.

Hors ligne

 

#11 Thu 19 July 2012 21:23

rouault
Participant assidu
Date d'inscription: 26 Apr 2009
Messages: 166

Re: Comment exécuter une requête Python OGR avec SELECT WHERE

Quand tu utilises un opérateur comme COUNT(), il n'est possible que d'utiliser des opérateurs qui renvoient une ligne unique comme lui (type MAX, MIN, etc...) dans la liste des colonnes. Cf les limitations indiquées dans http://gdal.org/ogr/ogr_sql.html

Tu dois certainement avoir un message d'erreur d'ailleurs.

Avant d'écrire le code python, je te conseillerais d'essayer avec ogrinfo -sql jusqu'à ce que ça marche.

Hors ligne

 

#12 Thu 19 July 2012 22:06

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: Comment exécuter une requête Python OGR avec SELECT WHERE

C'est vrai, je ne m'en souvenais plus.


Opérateur cartographique & DAO & PHP.

Hors ligne

 

Pied de page des forums

Powered by FluxBB