在PyCharm中调用arcpy运行以下代码
import arcpy
rows = arcpy.UpdateCursor("D:\\Documents\\ArcGIS\\Default.gdb\\南昌市渔网_label")
for row in rows:
row.getValue("value", 100)
rows.updateRow(row)
del row
del rows
目的是为了给 南昌市渔网_label 的 value 字段统一赋值 100 ,但是出现了报错
尝试关闭ArcGIS窗口重新运行代码,结果运行成功。猜想是因为 南昌市渔网_label 在ArcGIS窗口中被查看而产生了占用导致一开始没有运行成功。查看相关帮助,发现确实如此。以下是ArcGIS帮助中的内容。
插入和更新游标遵循由 ArcGIS 应用程序设置的表锁。锁能够防止多个进程同时更改同一个表。有两种锁的类型:共享和排它。
- 只要访问表或数据集就会应用共享锁。同一表中可以存在多个共享锁,但存在共享锁时,将不允许存在排它锁。应用共享锁的示例包括:在 ArcMap中显示要素类时以及在 ArcCatalog 中预览表时。
- 对表或要素类进行更改时,将应用排它锁。在 ArcGIS 中应用排它锁的示例包括:在 ArcMap 中编辑和保存要素类时;在ArcCatalog 中更改表的方案时;或者在 Python IDE(例如 PythonWin)中在要素类上使用插入游标时。
如果数据集上存在排它锁,则无法为表或要素类创建更新和插入游标。UpdateCursor 或 InsertCursor 函数会因数据集上存在排它锁而失败。如果这些函数成功地创建了游标,它们将在数据集上应用排它锁,从而使两个脚本无法在同一数据集上创建更新和插入游标。
根据帮助文档的解释,针对这一错误提供两种解决办法:
- 从ArcGIS窗口移除相关图层或直接关闭ArcGIS窗口,再在PyCharm中重新运行代码。
- 将代码复制到ArcGIS的Python窗口中运行。
能不能在PyCharm中删除原有的共享锁以保证数据正在被查看时也可以使用更新和插入游标呢?