上一篇講到如何添加一條資料
這篇將介紹 如何進行 編輯和查詢
在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
如果沒有啟用版本 則不能試用