#flask #sqlalchemy #flask-sqlalchemy
#flask #sqlalchemy #flask-sqlalchemy
Вопрос:
У меня проблемы с правилами зависимости. Хоть убей, я не могу понять, как удалить только одну строку, не удаляя ее отношений.
Таблицы:
User
-id
-name
Article
-id
-title
UserArticle
-id
-user_id
-article_id
В зависимости от моих каскадных правил, выполнение этого либо удаляет пользователя и статью, связанную с ним, либо просто выдает ошибку AssertionError.
ua = UserArticle.query.first()
db.session.delete(ua)
db.session.commit()
Вот одна из связей.
class UserArticle(db.Model):
user = relationship("User",
primaryjoin="UserArticle.user_id==User.id",
foreign_keys="User.id")
Да, я прочитал правила casecade, нет, я их не понимаю. http://docs.sqlalchemy.org/en/latest/orm/session.html#cascades
Как я могу просто удалить эту запись и ничего больше?
Ответ №1:
Каскадное правило означает, что все записи, которые были потеряны в результате вашего удаления, также должны быть удалены.
Когда вы удаляете пользовательскую статью, у пользователя (в глазах программы) больше нет причин существовать. Похоже, это проблема с вашей моделью базы данных.
Попробуйте определить свою модель с помощью…
class UserArticle(db.Model):
id = db.Column(db.Integer, primary_key=True, auto_increment=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
article_id = db.Column(db.Integer, db.ForeignKey('articles.id'))
creator = db.relationship("User", backref="UserArticle", primaryjoin=(user == User.id))
Я предполагаю, что в этом коде ваши пользователи и статьи сопоставляются с таблицами «пользователи» и «статьи» соответственно.
Комментарии:
1. Эй, это сработало. Спасибо, мой друг. Я искал не в том месте.