gpt4 book ai didi

python - Flask-SQLAlchemy:更新一对多关系

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:06 27 4
gpt4 key购买 nike

我有两个模型:

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

这将处理所需的 session 管理。这是一个最小的例子:

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>])

关于python - Flask-SQLAlchemy:更新一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40390009/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com