簡體   English   中英

Flask-SQLAlchemy:更新一對多關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM