gpt4 book ai didi

python - 如果自上次输入以来值没有更改,如何避免向 SQLAlchemy 添加行?

转载 作者:太空宇宙 更新时间:2023-11-03 19:22:17 25 4
gpt4 key购买 nike

我将通过 SQLAlchemy 跟踪数据库中某些值的演变:我将它们作为(键,值)对的序列,并且我希望每个键的值很少改变。

我正在使用SQLAlchemydeclarative ,模型如下所示:

class Item(Base):
timestamp = Column(DateTime)
key = Column(Unicode(16))
value = Column(something...)

我想在数据库中存储诸如(时间戳、键、值)之类的行,并避免存储新条目(如果该值自上次记录以来没有更改),同时保留过去值的整个历史记录。在伪Python中:

for foo in new_items:
query = session.query(Item).filter_by(key=foo.key)
latest = query.order_by(Item.timestamp.desc()).first()
if foo.value == latest.value:
continue # nothing changed, ignore the new item
else:
session.add(foo)
session.commit()

我应该采用像上面这样的幼稚方法吗?不知怎的,它给我的印象是代码不好看。至少我可能会将测试添加为 Item 的方法。

有更好的方法吗?更好并不一定意味着更快,可能只是更Pythonic或更好看的代码。

最佳答案

我知道有两种方法可以做到这一点。这是你的方法:

if value not in database:
session.add(value)
session.commit()

try:
session.add(value)
session.commit()
except IntegrityError:
session.rollback()

第一个有竞争条件。我倾向于使用第二种模式。

关于python - 如果自上次输入以来值没有更改,如何避免向 SQLAlchemy 添加行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9303782/

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