【问题标题】:How to Update Entity with one to many relationship in flask-sqlachemy如何在flask-sqlalchemy中更新具有一对多关系的实体
【发布时间】:2017-09-01 09:59:51
【问题描述】:

我有两个模型,父类和子类,我想更新这些类的属性,假设我们有: parent_name = “P1”,child_name = {“c1”,“c2”,“c3”}, 更新后,我们会有,parent_name = "P2", child_name = {"c1", "c2", "c3", "c4", "c5"

我已经研究过了,没找到解决办法,给个建议

class Parent(db.Model):
    __tablename__ = 'parent'
    id = db.Column(db.Integer, primary_key=True)
    children = relationship("Child" backref='parent', passive_deletes=True)
    parent_name = db.Column(db.String(64))

class Child(Base):
    __tablename__ = 'child'
    id = db.Column(db.Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id', ondelete='CASCADE'))
   child_name = db.Column(db.String(64))

【问题讨论】:

  • 您似乎既想更改实例的parent_name 属性(参见类)并为其添加一些子项,但请您改写问题以更好地描述您的真实情况想要。
  • 没错,我需要改变Parent的一些属性,还有Child。
  • 没错,我需要更改 parent_name 属性,还有 child_name 属性。我的表单,child_name 属性是动态字段(html),所以当更新 parent_name 时,可能我可以添加新字段(child_name)

标签: python-2.7 sqlalchemy flask-sqlalchemy


【解决方案1】:
parent = session.query(Parent).filter(Parent.name='P1').one()
parent.parent_name = 'P2'
parent.children.extend([Child(child_name='c4'), Child(childe_name='c5')])
session.commit()

首先,您从会话中查询父级。然后编辑它,它将保留在会话中,以便在提交时,会话中的更改会传播到数据库。

【讨论】:

  • 感谢您的回答,但无法解决,当我执行我的代码时,出现了一些错误。 -% self._rollback_exception-
猜你喜欢
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
  • 2016-06-15
  • 2021-08-31
  • 2019-08-08
  • 2019-01-23
  • 1970-01-01
相关资源
最近更新 更多