arcgis for python arcpy 入门 (三)
这篇将介绍 如何进行 编辑和查询
来自:https://www.cnblogs.com/aoldman/archive/2013/05/02/3054729.html
在10.1里面 arcpy 新增加了一个数据访问模块arcpy.da
帮助里面说 会比原来的游标性能快很多
但是在我的使用中发现 arcpy.da.updateCursor存在问题,截止到发这篇文章的时候还没有得到esri工作人员的答复
而且da模块下面的方法与原来的方法 参数上也有一些差异
比如arcpy.da.SearchCursor和arcpy.SearchCursor的对比如下
首先引入环境和设置数据库
然后通过新的da模块进行查询
这里可以发现 fields 参数 里面“oid@” 就是特指OBJECTID字段的一个令牌
整个fields 是一个string类型的数组
并且取值的时候row是可以使用索引的
但是在where条件的时候 还是需要真正字段名称的
注意:每次使用后记得删除变量,如果where值是string 记得加“”
下面是通过原始模块进行查询
可以发现 第一原始模块无法使用with这种 语法
第二 原始模块的可选参数 fields是一个string 型的字符串 并且没有特殊令牌
第三 row没有索引可以用,要通过getValue方法
下面是使用原始模块查询的方法
基本上差异不大
要说明的是 我这里都没有进入edit.startedit这种方法 所以不管sde是不是注册了版本 都会在默认版本上进行修改
更新的方式和查询的方式一样
但是arcpy.da.UpdateCursor 这个方法 无论我是否打开编辑模式 都无法进行update操作不知道为什么
所幸 使用原来的UpdateCursor 是可以
新的da模块错误如下:
最后 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
如果没有启用版本 则不能试用