Spécification d'une requête dans Python

Le langage SQL (Structured Query Language) est un langage puissant qui permet de définir un ou plusieurs critères composés d'attributs, d'opérateurs et de calculs. Imaginez par exemple que vous utilisez une table de données client et que vous souhaitez identifier les clients qui ont dépensé plus de 50 000 dollars pour vos produits au cours de l'année précédente et qui travaillent dans la restauration. Vous pouvez sélectionner les clients avec cette expression : "Sales > 50000 AND Business_type = Restaurant ».

Lorsqu'une requête est spécifiée pour un curseur de mise à jour ou de recherche, seuls les enregistrements correspondant à cette requête sont renvoyés. Une requête SQL représente un sous-ensemble de requêtes de table uniques applicables à une table d'une base de données SQL à l'aide de l'instruction SQL SELECT. La syntaxe utilisée pour spécifier la clause WHERE est identique à celle de la base de données sous-jacente contenant les données.

L'exemple ci-dessous filtre les lignes d'un curseur de recherche uniquement selon les routes d'une classe de route spécifique :

import arcpy

fc = "D:/St_Johns/data.gdb/roads"

# Create a search cursor using an SQL expression
#
cursor = arcpy.da.SearchCursor(fc, ("roadclass", "name"), """"roadclass" = 2""")
for row in cursor:
    # Print the name of the residential road
    #
    print(row[1])
Astuce :

Dans Python, créer des expressions en les entourant de guillemets triples facilite à la fois la lecture et la compréhension.

Utilisation de la fonction AddFieldDelimiters avec une expression SQL

Les délimiteurs de champ utilisés dans une expression SQL diffèrent selon le format des données interrogées. Par exemple, les géodatabases fichier et les fichiers de formes utilisent des guillemets doubles (" "), les géodatabases personnelles utilisent des crochets ([ ]) et les géodatabases ArcSDE n'utilisent pas de délimiteurs de champ. La fonction AddFieldDelimiters peut permettre d'éliminer certaines hypothèses en s'assurant que les délimiteurs de champ utilisés avec votre expression SQL sont corrects. L'exemple suivant s'appuie sur l'exemple ci-dessus pour ajouter les bons délimiteurs de champ à l'expression SQL.

import arcpy

fc = "D:/St_Johns/data.gdb/roads"
fieldname = "roadclass"

# Create field name with the proper delimiters
#
whereclause = """{} = 2""".format(arcpy.AddFieldDelimiters(fc, fieldname))

# Create a search cursor using an SQL expression
#
cursor = arcpy.da.SearchCursor(fc, ("roadclass", "name"), whereclause)

for row in cursor:
    # Print the name of the residential road
    print(row[1])