Error in SQLAlchemy – sqlalchemy.orm.exc.StaleDataError

Correcting an error in SQLAlchemy when deleting data: sqlalchemy.orm.exc.StaleDataError.

Error:

raise orm_exc.StaleDataError (
sqlalchemy.orm.exc.StaleDataError: UPDATE statement on table ‘categories’ expected to update 4 row (s); 0 were matched.

Occurs when intersecting db.relationship… When relationships are specified in each other’s models. For example:

class Task(db.Model, RoleMixin):
__tablename__ = ‘task’

cats = db.relationship(
‘Category’,
secondary=‘categories_task’,
backref=db.backref(‘task’),
)

and

class CategoriesDone(db.Model):
__tablename__ = ‘categories_task’
id = db.Column(db.Integer(), primary_key=True, unique=True)

done_id = db.Column(db.Integer, db.ForeignKey(‘task.id’))
cat_id = db.Column(db.Integer, db.ForeignKey(‘categories.id’))

time_passed = db.Column(db.Integer())
time = db.Column(db.DateTime())

done = db.relationship(Done, backref=“categories_task”)
cat = db.relationship(Category, backref=“categories_task”)

To solve this problem, install passive_deletes = True, i.e .:

cats = db.relationship(
‘Category’,
secondary=‘categories_task’,
backref=db.backref(‘task’),
passive_deletes=True
)

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *