沈阳格力专卖店 发表于 2015-4-21 13:14:30

arcgis for python arcpy 入门 (三)

  上一篇讲到如何添加一条数据
  这篇将介绍 如何进行 编辑和查询
  
  在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 = '1'
      cur.updateRow(row)
      
edit.stopOperation ()      
edit.stopEditing(True)
  
  其中 如果启用了版本控制 需要startoperation 和stopOperation
  如果没有启用版本 则不能试用
页: [1]
查看完整版本: arcgis for python arcpy 入门 (三)