UpdateCursor (arcpy.da)
摘要
UpdateCursor 用于建立对从要素类或表返回的记录的读写访问权限。
返回一组迭代列表。列表中值的顺序与 field_names 参数指定的字段顺序相符。
讨论
使用 for 循环可迭代更新游标。更新游标还支持 with 语句。使用 with 语句可保证数据库锁的关闭和释放,并重置迭代。
使用不同游标在同一个工作空间上开启同步插入或更新操作时,需要启动编辑会话。
计算字段工具也可用于更新字段值。
不能将 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 | The Spatial Reference of the feature class can be specified with either a SpatialReference object or string equivalent. (默认值为 None) | SpatialReference |
explode_to_points | 将要素解构为单个点或折点。如果将 explode_to_points 设置为 True,则一个包含五个点的多点要素将表示为五行。 (默认值为 False) | Boolean |
sql_clause | 以列表或组的形式列出的可选 SQL 前缀和后缀子句对。 SQL prefix supports None, DISTINCT, and TOP. SQL postfix supports None, ORDER BY, and GROUP BY. SQL 前缀子句位于第一个位置,将被插入到 SELECT 关键字和 SELECT COLUMN LIST 之间。SQL 前缀子句最常用于 DISTINCT 或 ALL 等子句。 SQL 后缀子句位于第二个位置,将追加到 SELECT 语句的 where 子句之后。SQL 后缀子句最常用于 ORDER BY 等子句。 注: 仅在使用数据库时支持使用 DISTINCT、ORDER BY 和 ALL。它们不受其他数据源(如 dBASE 或 INFO 表)的支持。 TOP 仅受 SQL Server 和 MS Access 数据库的支持。 (默认值为 (None, None)) | tuple |
属性
属性 | 说明 | 数据类型 |
fields (只读) |
A tuple of field names used by the cursor. The tuple will include all fields (and tokens) specified by the field_names argument. If the field_names argument is set to "*", the fields property will include all fields used by the cursor. When using "*", geometry values will be returned in a tuple of the x,y-coordinates (equivalent to the SHAPE@XY token). | tuple |
方法概述
方法 | 说明 |
deleteRow () | 删除当前行。 |
next () |
将下一行作为元组返回。字段将按照创建光标时所指定的顺序返回。 |
reset () |
将光标重置回第一行。 |
updateRow (row) |
更新表中的当前行。 |
方法
数据类型 | 说明 |
tuple |
参数 | 说明 | 数据类型 |
row |
A list or tuple of values. The order of values should be in the same order as the fields. When updating fields, if the incoming values match the type of field, the values will be cast as necessary. For example, a value of 1.0 to a string field will be added as "1.0", and a value of "25" added to a float field will be added as 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 更新缓冲距离字段,以便与缓冲工具配合使用。
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')