如何使用SQLAlchemy ORM将孩子从一个父母复制到另一父母?

时间:2019-04-10 22:22:03

标签: python flask sqlalchemy

我有两个模型Map和Image。为了简单起见,我只考虑关系:

class Map(Model):
    __tablename__ = 'maps'

    id = Column(
        Integer,
        primary_key=True
        )

    images = relationship(
        'Image',
        uselist=True,
        cascade='all, delete-orphan',
        passive_deletes=True
        )


class Image(Model):
    __tablename__ = 'images'

    id = Column(
        Integer,
        primary_key=True
        )

    map_id = Column(
        Integer,
        ForeignKey(
            'maps.id',
            onupdate='CASCADE',
            ondelete='CASCADE'
            ),
        index=True,
        nullable=False
        )

    map = relationship(
        'Map',
        back_populates='images'
        )

我试图像这样将图像从一个模型实例复制到另一个

new_map = Map()
# do some stuff
old_map = Map.query.get(some_id)
new_map.images = old_map.images
session.add(new_map)
session.commit()

(对我来说)这具有意外的行为,即更改原始表行上的map_id列,而不是创建一个新对象(即副本)或将旧对象分配给新地图的map_id。我敢肯定这种行为是有道理的,但是我在寻找自己想要的行为时遇到了麻烦。

如何将孩子列表复制到另一父母,创建新行并保留旧行?

0 个答案:

没有答案