我有一个关于在动态改变关系数据时使用ORM(Peewee)的基本概念问题。
Peewee将信息从数据库映射到Python对象,以便于使用。
我的理解是查询在查询时生成Python对象。如果DB数据然后以某种方式被改变(通过另一个线程,在我的情况下)生成的对象的属性现在已经过时了,对吗?
我的核心问题是我的应用程序在结构上非常异步 - 一个webapp提供前端(通过Flask),硬件传感器输入数据,运行守护进程根据我的数据库内容确定要采取的操作。因此,我不得不手动重新查询,以便我的Python对象正确地表示数据库中的数据,例如:
name = 'obj_name'
instance = Model.select().where(Model.name = name)
#time passes, need to refresh
instance = Model.get(Model.id == instance.id)
有没有办法让这更优雅?
理想情况下,每次访问Peewee对象时,我都会自动重新查询数据库。
或者,我可以添加一个更新对象的refresh()方法,例如:
instance = instance.refresh()
有什么建议吗?
在这种情况下使用ORM最简洁的方法是什么?
答案 0 :(得分:2)
所以你在一个线程中拥有长寿的Python对象,同时另一个线程正在更新数据库?使用像Peewee这样的ActiveRecord ORM可以做到最好的重新查询。
def refresh(self):
return type(self).get_by_id(self._pk)