@beduin01

Python: Где надо выполнить транзакцию?

Есть следующий код:

for row in arcpy.da.SearchCursor(db_from, fields, where_clause="objectid < 11111"):
	value_from = list(row)
	for rowto in arcpy.da.SearchCursor(db_to, fields, where_clause="uid = '" + str(row[0]) + "'"):
		value_to = list(rowto)
		if(set(value_from) == set(value_to)): # Данные одинаковые
			same +=1
			print "data is same"
		else:
			with arcpy.da.UpdateCursor(db_to, fields, where_clause="uid = '" + str(row[0]) + "'") as cursor:
				for x in cursor:
					cursor.updateRow(value_from)
					updated +=1
					print "data update"
	else:
		to_cursor.insertRow(value_from) # мне кажется ошибка где то тут
		print "Inserted"

print "Same Data: ", str(same)
print "Updated Data: ", str(updated)


проблема возникает в следующем месте:

data update
data update
data update
data update
data update
Inserted
Traceback (most recent call last):
  File "C:\code\Python\work\dbsync.py", line 69, in <module>
    for x in cursor:
RuntimeError: workspace already in transaction mode


В каком месте мне нужно закрывать транзацию? Как я понимаю проблема возникает в тот момент когда я в БД db_to делаею в начале выборку, а потом пытаюсь в нее вставку сделать. Верно? Обновление проходит нормально, а первая же вставка все рушит.

Если что использую ArсPy
  • Вопрос задан
  • 510 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы