如何删除sql-alchemy中的一行而不删除任何关系

时间:2014-06-25 01:45:31

标签: 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 个答案:

答案 0 :(得分:1)

级联规则意味着删除孤立的所有记录也应删除。

当您删除UserArticle时,用户(在程序眼中)没有理由再存在。这看起来像是您的数据库模型的问题。

尝试使用...

定义模型
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))

我在此代码中假设您的用户和文章已映射到"用户"和"文章"分别表。