UpdateCursor (arcpy.da)

摘要

UpdateCursor 用于建立对从要素类或表返回的记录的读写访问权限。

返回一组迭代列表。列表中值的顺序与 field_names 参数指定的字段顺序相符。

讨论

使用 for 循环可迭代更新游标。更新游标还支持 with 语句。使用 with 语句可保证数据库锁的关闭和释放,并重置迭代。

注注:

使用不同游标在同一个工作空间上开启同步插入或更新操作时,需要启动编辑会话

注注:

计算字段工具也可用于更新字段值。

注注:

不能将 arcpy.da.UpdateCursorarcpy.UpdateCursor 相混淆。

语法

UpdateCursor (in_table, field_names, {where_clause}, {spatial_reference}, {explode_to_points}, {sql_clause})
参数说明数据类型
in_table

要素类、图层、表或表视图。

String
field_names
[field_names,...]

字段名称列表(或组)。对于单个字段,可以使用一个字符串,而不使用字符串列表。

如果要访问输入表中的所有字段(栅格和 BLOB 字段除外),可以使用星号 (*) 代替字段列表。但是,为了获得较快的性能和可靠的字段顺序,建议您将字段列表限制在实际需要的字段。

不支持栅格字段。

以令牌(如 OID@)取代字段名称可访问更多的信息:

  • SHAPE@XY一组要素的质心 x,y 坐标。
  • SHAPE@TRUECENTROID一组要素的真正质心 x,y 坐标。
  • SHAPE@X要素的双精度 x 坐标。
  • SHAPE@Y要素的双精度 y 坐标。
  • SHAPE@Z要素的双精度 z 坐标。
  • SHAPE@M要素的双精度 m 值。
  • SHAPE@JSON 表示几何的 esri JSON 字符串。
  • SHAPE@WKBOGC 几何的熟知二进制 (WKB) 制图表达。该存储类型将几何值表示为不间断的字节流形式。
  • SHAPE@WKTOGC 几何的熟知文本 (WKT) 制图表达。其将几何值表示为文本字符串。
  • SHAPE@要素的几何对象。
  • SHAPE@AREA要素的双精度面积。
  • SHAPE@LENGTH要素的双精度长度。
  • OID@ObjectID 字段的值。
注注:

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)

更新表中的当前行。

方法

deleteRow ()
next ()
返回值
数据类型说明
tuple
reset ()
updateRow (row)
参数说明数据类型
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 示例 1

通过评估其他字段值使用 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 示例 2

使用 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')

相关主题

5/10/2014