arcgis for python arcpy 入门 (三)

上一篇讲到如何添加一条数据

这篇将介绍 如何进行 编辑和查询

在10.1里面 arcpy 新增加了一个数据访问模块arcpy.da

帮助里面说 会比原来的游标性能快很多

但是在我的使用中发现 arcpy.da.updateCursor存在问题,截止到发这篇文章的时候还没有得到esri工作人员的答复

而且da模块下面的方法与原来的方法 参数上也有一些差异

比如arcpy.da.SearchCursor和arcpy.SearchCursor的对比如下

首先引入环境和设置数据库

image

image

然后通过新的da模块进行查询

image

这里可以发现 fields 参数 里面“oid@” 就是特指OBJECTID字段的一个令牌

整个fields 是一个string类型的数组

并且取值的时候row是可以使用索引的

但是在where条件的时候 还是需要真正字段名称的

image

注意:每次使用后记得删除变量,如果where值是string 记得加“”

image

下面是通过原始模块进行查询

image

可以发现 第一原始模块无法使用with这种 语法

第二 原始模块的可选参数 fields是一个string 型的字符串 并且没有特殊令牌

第三 row没有索引可以用,要通过getValue方法

下面是使用原始模块查询的方法

image

基本上差异不大

要说明的是 我这里都没有进入edit.startedit这种方法 所以不管sde是不是注册了版本 都会在默认版本上进行修改

更新的方式和查询的方式一样

但是arcpy.da.UpdateCursor 这个方法 无论我是否打开编辑模式 都无法进行update操作不知道为什么

所幸 使用原来的UpdateCursor 是可以

新的da模块错误如下:

image

image

最后 da.updatecursor 已经可以试用了 如下代码

from arcpy import *

ws = r'Database Connections\Connection to 192.168.220.165.sde'
edit = da.Editor(ws)


edit.startEditing(False, True)
edit.startOperation()
        
with da.UpdateCursor("SDE.mutlPolygons",'TEST') as cur:
    for row in cur:
        row[0] = '1'
        cur.updateRow(row)
        
edit.stopOperation ()        
edit.stopEditing(True)

其中 如果启用了版本控制 需要startoperation 和stopOperation

如果没有启用版本 则不能试用

原文地址:https://www.cnblogs.com/aoldman/p/3054729.html