【发布时间】:2021-10-27 06:34:57
【问题描述】:
我有一个由关联表链接的多对多关系,如下所示:
left_right_association_table = Table("left_right_association_table", Base.metadata,
Column('leftside_id', Integer, ForeignKey('leftside_table.id')),
Column('rightside_id', Integer, ForeignKey('rightside_table.id'))
)
class LeftSide(Base):
...
rightside_members = relationship("RightSide", secondary=left_right_association_table, backref="leftside", lazy="joined")
...
class RightSide(Base):
...
现在我有一个LeftSide 实例,其中RightSide 实例的list 作为其rightside_members 属性:
ls = LeftSide(**kw)
rs1 = RightSide(**kw)
rs2 = RightSide(**kw)
ls.rightside_members.append(rs1)
ls.rightside_members.append(rs2)
然后,我想删除列表成员之一:rs2。
第 1 步:我重现 rightside_members 列表:
updated_rightside_members = [RightSide(**rs_attrs) for rs_attrs in ls.rightside_members] # each `rs` object already has primary key
updated_rightside_members.pop() # remove the second item from the list
第 2 步:我从数据库中检索 ls:
old_ls = db_session.query(LeftSide).filter(LeftSide_id == ls.id).one()
第 3 步:我将 updated_rightside_members 添加到 old_ls:
old_ls.rightside_members = updated_rightside_members
第 4 步:提交到数据库。
db_session.commit()
然后我得到这个错误:
sqlite3.IntegrityError: UNIQUE constraint failed: rightside_table.id
在我看来,SQLAlchemy 认为我正在尝试将重复的 rs1 放回数据库,而不是从数据库中删除其兄弟 rs2。
这个删除操作应该怎么做?
【问题讨论】: