Peewee ORM 获取更新的数据库数据
Peewee ORM getting updated DB data
我有一个关于在动态变化的关系数据上使用 ORM(特别是 Peewee)的基本概念问题。
Peewee 将信息从数据库映射到 Python 对象以便于使用。
我的理解是查询在查询时产生了Python对象。然后是否应该以某种方式更改数据库数据(在我的例子中是通过另一个线程)生成的对象的属性现在已经过时了,对吗?
我的核心问题是我的应用程序在结构上非常异步——网络应用程序提供前端(通过 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 最简洁的方法是什么?
所以您在一个线程中有长期存在的 Python 对象,同时另一个线程正在更新数据库?重新查询是使用像 Peewee 这样的 ActiveRecord ORM 所能做的最好的事情。
def refresh(self):
return type(self).get_by_id(self._pk)
我有一个关于在动态变化的关系数据上使用 ORM(特别是 Peewee)的基本概念问题。
Peewee 将信息从数据库映射到 Python 对象以便于使用。
我的理解是查询在查询时产生了Python对象。然后是否应该以某种方式更改数据库数据(在我的例子中是通过另一个线程)生成的对象的属性现在已经过时了,对吗?
我的核心问题是我的应用程序在结构上非常异步——网络应用程序提供前端(通过 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 最简洁的方法是什么?
所以您在一个线程中有长期存在的 Python 对象,同时另一个线程正在更新数据库?重新查询是使用像 Peewee 这样的 ActiveRecord ORM 所能做的最好的事情。
def refresh(self):
return type(self).get_by_id(self._pk)