@toobinks

Почему возникает исключение sqlalchemy.orm.exc.StaleDataError?

class Unit(SurrogatePK, Model):
    __tablename__ = 'units'
    id = Column(db.String, primary_key=True)

request_unit_assoc = Table('request_unit_assoc', db.metadata,
                                Column('request_id', db.Integer,
                                       db.ForeignKey('requests.id')),
                                Column('unit_id', db.String(30),
                                       db.ForeignKey('units.id'))
                                )


class Request(SurrogatePK, Model):
    __tablename__ = 'requests'
    units = relationship('Unit', secondary=request_unit_assoc, backref='requests', lazy='dynamic')

units = Unit.query.with_parent(req).filter(Unit.id.notin_(unit_ids)).all()
for unit in units:
    req.units.remove(unit)
req.save()


При удалении большого количество Unit из коллекции возникает исключение sqlalchemy.orm.exc.StaleDataError:
sqlalchemy.orm.exc.StaleDataError: DELETE statement on table 'request_unit_assoc' expected to delete 26265 row(s); Only 26267 were matched.


1. Объясните, пожалуйста, суть ошибки.
2. Как разом и быстро удалить набор Unit из request.units?

Спасибо.
  • Вопрос задан
  • 682 просмотра
Пригласить эксперта
Ответы на вопрос 1
@nmelis
Я знаю что ответ для вас наверное уже на актуальна, но ответ на это я не нашел не где( пока сам не сообразил.

Суть проблемы: я тоже этим возился целую ночь, наверное вы как и я совершили ошибку - не надо запихивать в вашем случае в request_unit_assoc одинаковые элементы, тоесть элемент у которого и request_id и unit_id дважды , надо проверять при добавление.

Решение: После того как вы удалить эти одинаковые элементы с request_unit_assoc - сделайте проверку (то что писал ввыше). А удалить одинаковые элементы можно разными способами
Например: https://stackoverflow.com/questions/9882358/how-to...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы