Вы указали unique=True
в поле имени, поэтому, когда вы пытаетесь зафиксировать, он запустит запрос на обновление, что вызовет ошибку.
Ситуация возникает, когда вы меняете имя, которое будет установлено в памяти. Но когда он попытается выполнить запрос на обновление, старая запись уже существует с таким же именем, поэтому она выдаст IntegrityError
.
Способ изменить имя
a = MyObject(name="Max")
b = MyObject(name="Moritz")
session.add_all([a, b])
session.commit()
# Now: switch names!
atmp = a.name
btemp = b.name
a.name = a.name+btemp # Temp set the any random name
session.commit()
b.name = atemp
a.name = btemp
session.commit() # Run the update query for update the record.