gpt4 book ai didi

python - 使用 SQLAlchemy OrderingList 更新现有对象的顺序

转载 作者:行者123 更新时间:2023-11-29 16:08:59 24 4
gpt4 key购买 nike

我试图在使用 SQLAlchemy 排序列表时更新现有对象的顺序。这是 SQLAlchemy docs 中使用的示例模型:

class Slide(Base):
__tablename__ = 'slide'

id = Column(Integer, primary_key=True)
name = Column(String)

bullets = relationship("Bullet", order_by="Bullet.position",
collection_class=ordering_list('position'))

class Bullet(Base):
__tablename__ = 'bullet'
id = Column(Integer, primary_key=True)
slide_id = Column(Integer, ForeignKey('slide.id'))
position = Column(Integer)
text = Column(String)

我了解如何使用新对象调用 append() 并且效果很好。

但是如何更新现有对象的顺序?

我已经尝试过这个并得到一些难以理解的结果。

existing_item = session.query(Bullet).filter(Bullet.id == bullet_id).one()
slide.bullets.insert(new_order, existing_item)
slide.bullets.reorder()
session.commit()

似乎没有任何文档解释如何更新现有对象。我错过了什么吗?

最佳答案

我想我已经明白了这一点。在重新插入之前,我需要对相关对象调用 remove()

不确定是否有更好的方法,但这可行。

existing_item = session.query(Bullet).filter(Bullet.id == bullet_id).one()
slide.bullets.remove(existing_item)
slide.bullets.insert(new_order, existing_item)
slide.bullets.reorder()
session.commit()

还值得注意的是:我使用的是 count_from=1,因此需要我从 new_order 中减去 1,这样最终用户就不会被以下订单所迷惑:从 0 开始。

关于python - 使用 SQLAlchemy OrderingList 更新现有对象的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55444127/

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