[英]Flask-SQLAlchemy: Update a One to Many Relationship
我有兩個模型:
class Project(db.Model):
__tablename__ = 'project'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
timestamp = db.Column(db.DateTime)
info = db.Column(db.Text(255))
post = db.relationship('Post', backref=db.backref('projects'))
class Post(db.Model):
__tablename__ = 'post'
id = db.Column(db.Integer, primary_key=True)
headline = db.Column(db.String(64))
content = db.Column(db.Text(255))
timestamp = db.Column(db.DateTime)
projectId = db.Column(db.Integer, db.ForeignKey('project.id'))
例如,如果我創建了一個post實例,並通過projectInstance.append(post(headline="...", content="..."))
將其附加到項目中
現在,我想更新帖子所屬的項目。 除了查詢所需的項目,將帖子附加到該項目並將其從舊項目中刪除,還有沒有更簡單的方法?
oldProject.remove(post)
newProject.append(post)
另一種方法是:使用Post
的向后引用:
post.projects = newProject
這將處理所需的會話管理。 這是一個最小的示例:
In [2]: class A(Base):
...: __tablename__ = 'a'
...: id = Column(Integer, primary_key=True, autoincrement=True)
...: bs = relationship('B', backref='a')
...:
In [3]: class B(Base):
...: __tablename__ = 'b'
...: id = Column(Integer, primary_key=True, autoincrement=True)
...: a_id = Column(Integer, ForeignKey('a.id'))
...:
In [5]: a1 = A()
In [6]: a2 = A()
In [7]: b = B()
In [8]: a1.bs.append(b)
In [9]: a1.bs
Out[9]: [<__main__.B at 0x7f7322fb52b0>]
In [10]: b.a = a2
In [11]: a1.bs, a2.bs
Out[11]: ([], [<__main__.B at 0x7f7322fb52b0>])
同樣,只需將post
實例附加到newProject.post
集合即可處理自動刪除操作,如我們的as和bs所示:
In [9]: a1.bs.append(b)
In [10]: a1.bs, a2.bs
Out[10]: ([<__main__.B at 0x7f26702565f8>], [])
In [11]: a2.bs.append(b)
In [12]: a1.bs, a2.bs
Out[12]: ([], [<__main__.B at 0x7f26702565f8>])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.