Определение запроса в Python
Язык структурированных запросов (SQL) является мощным языком, который используется для определения одного и более критериев, которые состоят из атрибутов, операторов и вычислений. Например, представьте, что у вас есть таблица с данными о клиентах, и вы хотите найти тех, кто потратил более 50 000 долларов за последний год и владеет ресторанным бизнесом. Клиентов можно выбрать с помощью такого выражения: "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
#
c = arcpy.da.SearchCursor(fc, ("roadclass", "name"), """"roadclass" = 2""")
for row in c:
# 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 = """%s = 2""" % arcpy.AddFieldDelimiters(fc, fieldname)
# Create a search cursor using an SQL expression
#
c = arcpy.da.SearchCursor(fc, ("roadclass", "name"), whereclause)
for row in c:
# Print the name of the residential road
print row[1]