Peewee ORM获取更新的DB数据

时间:2018-02-09 05:01:38

标签: python orm peewee

我有一个关于在动态改变关系数据时使用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最简洁的方法是什么?

1 个答案:

答案 0 :(得分:2)

所以你在一个线程中拥有长寿的Python对象,同时另一个线程正在更新数据库?使用像Peewee这样的ActiveRecord ORM可以做到最好的重新查询。

def refresh(self):
    return type(self).get_by_id(self._pk)