Здравствуйте. Столкнулся со странным поведением курсора, который обновляет записи в таблице. Возможно, кто-то сталкивался с похожей проблемой и подскажет решение.
На сервере установлен ArcGIS for Server. В СУБД MS SQL создана база пространственных данных. В базе есть полигональный слой, который необходимо периодически обновлять на основании внешних шейп-файлов. Был подготовлен скрипт на python, который читает шейп-файлы и обновляет записи в базе данных, если выполняются определенные условия. Запускается скрипт на том же сервере.
Код метода для обновления:
class Dataset(object):
def update(self, new_features):
with arcpy.da.Editor(self.workspace):
with arcpy.da.UpdateCursor(self.path, self.fields) as cursor:
for row in cursor:
feature = Feature.create(self.fields, row)
if feature.id in new_features:
new_feature = new_features[feature.id]
if new_feature.date > feature.date:
cursor.updateRow(new_feature.as_row(self.fields))
else:
pass
else:
cursor.deleteRow()
Проблема заключается в том, что курсор проходит по всем записям в таблице (обновляя, удаляя или пропуская каждую запись), а потом проходит по некоторым из обновленных записей повторно. Поясню на примере: в таблице всего 10000 записей. Курсор прошел по всем 10000, и еще раз по 200 обновленным записям. Причем иногда это может быть 10 лишних записей, иногда 800, а иногда и 0. Закономерность уследить не удалось. Почему курсор проходит по обновленным записям повторно?
Версия ArcGIS for Server 10.3.1, СУБД MS SQL Server 2012, скрипт подключается к базе под учетной записью владельца данных. Версионность для обновляемого слоя не включена, т.к. никто кроме владельца данных (скрипта) изменять данные не должен. Спасибо