Pages: 1
- Sujet précédent - Comment exécuter une requête Python OGR avec SELECT WHERE - Sujet suivant
#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
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
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
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: 168
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: 168
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
Pages: 1
- Sujet précédent - Comment exécuter une requête Python OGR avec SELECT WHERE - Sujet suivant