Язык структурированных запросов (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])