UpdateCursor (arcpy.da)
Резюме
UpdateCursor предоставляет доступ для чтения и записи к записям, возвращаемым из класса объектов или таблицы.
Возвращает итератор списков. Порядок значений в списке совпадает с порядком полей, указанных аргументом field_names.
Обсуждение
Курсоры обновления могут быть итерированы с помощью цикла for. Курсоры обновления также поддерживают выражение with. Выражение with гарантирует закрытие и снятие блокировок в базе данных, а также сброс итерации.
Для одновременного открытия операций вставки и/или обновления в одной рабочей области с использованием разных курсоров необходимо открыть сеанс редактирования.
Инструмент Вычислить поле (Calculate Field) предоставляет другой метод для обновления значений полей.
arcpy.da.UpdateCursor не следует путать с arcpy.UpdateCursor.
Синтаксис
Параметр | Объяснение | Тип данных |
in_table |
Входной класс объектов, слой, таблица или табличное представление. | String |
field_names [field_names,...] | Список (или кортеж) имен полей. Для одного поля можно использовать строку вместо списка строк. Используйте символ звездочки (*) вместо списка полей, если вы хотите получить доступ ко всем полям из входной таблицы (растровые поля и поля BLOB исключены). Однако для повышения производительности и улучшения надежности порядка полей рекомендуется сузить список полей до реально необходимых полей. Растровые поля не поддерживаются. Дополнительные сведения можно получить, используя токены (такие как OID@) вместо имен полей:
Примечание: Токены SHAPE@JSON, SHAPE@WKB и SHAPE@WKT стали доступны в пакете обновлений ArcGIS 10.1 Service Pack 1. | String |
where_clause | Возвращается дополнительное выражение, которое ограничивает записи. Дополнительные сведения о выражениях WHERE и инструкциях SQL см. в разделах Построение выражения запроса и Определение запроса в Python. (Значение по умолчанию — None) | String |
spatial_reference | Пространственную привязку класса пространственных объектов можно указать либо с объектом SpatialReference, либо строковым эквивалентом. (Значение по умолчанию — None) | SpatialReference |
explode_to_points | Разбивает объект на отдельные точки или вершины. Если для explode_to_points задано значение True, объект мультиточки с пятью точками, например, представляется пятью строками. (Значение по умолчанию — False) | Boolean |
sql_clause | Дополнительная пара префикса и постфикса SQL, объединенная в списке или кортеже. SQL префикс поддерживает None, DISTINCT, и TOP. SQL постфикс (суффикс) поддерживает None, ORDER_BY, и GROUP_BY. Префикс SQL располагается в первой позиции и будет вставлен между ключевым словом SELECT и SELECT COLUMN LIST. Чаще всего используется для таких выражений, как DISTINCT и ALL. Постфикс SQL располагается во второй позиции и добавляется к инструкции SELECT после выражения where. Чаще всего используется для таких выражений, как ORDER BY. Примечание: Эта функциональность доступна только при работе с базами геоданных. Другие источники данных не поддерживают ее. (Значение по умолчанию — (None, None)) | tuple |
Свойства
Свойство | Объяснение | Тип данных |
fields (только чтение) |
Список (или кортеж) имен полей, используемых курсором. В кортеж будут включены все поля (и токены), указанные аргументом field_names. Если аргумент field_names будет иметь значение "*", то в свойства полей будут включаться все поля, используемые курсором. Когда используется "*", значения геометрии будут выводиться в кортеже координат x и y (эквивалент токену SHAPE@XY). | tuple |
Обзор метода
Метод | Объяснение |
deleteRow () |
Удаляет текущий ряд. |
next () |
Возвращает следующую строку в виде кортежа (набора взаимосвязанных величин). Порядок возвращаемых полей зависит от порядка, указанного при создании курсора. |
reset () |
Сбрасывает курсор на первую строку. |
updateRow (row) |
Обновляет текущую строку в таблице. |
Методы
Тип данных | Объяснение |
tuple |
Параметр | Объяснение | Тип данных |
row |
Список или кортеж значений. Порядок значений должен быть таким же, как и порядок полей. Если при обновлении полей входящие значения совпадают с типом поля, значения будут объявлены необходимыми. Например, значение 1.0 будет добавлено в поле string как "1.0", а значение "25" в поле float будет записано как 25.0. | tuple |
Пример кода
Использование UpdateCursor для обновления значения поля за счет вычисления значений других полей.
import arcpy
fc = "c:/data/base.gdb/well"
fields = ('WELL_YIELD', 'WELL_CLASS')
# Create update cursor for feature class
#
with arcpy.da.UpdateCursor(fc, fields) as cursor:
# For each row, evaluate the WELL_YIELD value (index position
# of 0), and update WELL_CLASS (index position of 1)
#
for row in cursor:
if (row[0] >= 0 and row[0] <= 10):
row[1] = 1
elif (row[0] > 10 and row[0] <= 20):
row[1] = 2
elif (row[0] > 20 and row[0]<= 30):
row[1] = 3
elif (row[0] > 20):
row[1] = 4
# Update the cursor with the updated list
#
cursor.updateRow(row)
Использование UpdateCursor для обновления поля буферных расстояний, используемых с инструментом Буфер (Buffer).
import arcpy
arcpy.env.workspace = "c:/data/output.gdb"
fc = "c:/data/base.gdb/roads"
fields = ("ROAD_TYPE", "BUFFER_DISTANCE")
# Create update cursor for feature class
#
with arcpy.da.UpdateCursor(fc, fields) as cursor:
# Update the field used in Buffer so the distance is based on road
# type. Road type is either 1, 2, 3 or 4. Distance is in meters.
#
for row in cursor:
# Update the BUFFER_DISTANCE field to be 100 times the
# ROAD_TYPE field.
#
row[1] = row[0] * 100
cursor.updateRow(row)
# Buffer feature class using updated field values
#
arcpy.Buffer_analysis(fc, "roads_buffer", "BUFFER_DISTANCE")