Определение запроса в Python

Язык структурированных запросов (SQL) является мощным языком, который используется для определения одного и более критериев, которые состоят из атрибутов, операторов и вычислений. Например, представьте, что у вас есть таблица с данными о клиентах, и вы хотите найти тех, кто потратил более 50000 долларов за последний год и владеет ресторанным бизнесом. Клиентов можно выбрать с помощью такого выражения: "Sales > 50000 AND Business_type = 'Restaurant'".

Если запрос выбран для курсора обновления или поиска, будут возвращены записи, соответствующие этому запросу. Запрос SQL представляет собой поднабор запросов одной таблицы, который можно выполнить в таблице базы данных SQL, использовав выражение SQL SELECT. Синтаксис, используемый для определения выражения WHERE, такой же, как и для основной базы данных, в которой находятся данные.

В приведенном ниже примере выполняется фильтрация строк курсора поиска, с целью нахождения дорог лишь выбранного класса.

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])
Подсказка:

В Python построение выражений, выделенные тройными кавычками, облегчает их чтение.

Использование AddFieldDelimiters в выражении SQL

Ограничители поля в выражении SQL отличаются в зависимости от формата запрашиваемых данных. Например, в базах геоданных и шейп-файлах используются двойные кавычки (" "), в персональных базах геоданных используются квадратные скобки ([ ]), а в базах геоданных ArcSDE ограничители поля не используются вообще. Функция AddFieldDelimiters может слегка упростить работу, обеспечив использование правильных ограничителей поля в выражении SQL. В следующем примере показано добавление соответствующих ограничителей поля для выражения 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])