【问题标题】:Peewee ORM getting updated DB dataPeewee ORM 获取更新的数据库数据
【发布时间】:2018-07-19 19:42:49
【问题描述】:

我有一个关于在动态变化的关系数据上使用 ORM(特别是 Peewee)的基本概念问题。

Peewee 将信息从数据库映射到 Python 对象以便于使用。

我的理解是查询在查询时生成 Python 对象。然后应该以某种方式更改数据库数据(在我的情况下是通过另一个线程)生成的对象的属性现在已经过时了,对吗?

我的核心问题是我的应用程序在结构上是非常异步的——Web 应用程序提供前端(通过 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 最简洁的方法是什么?

【问题讨论】:

  • 你是使用 ORM 来更新行还是仅仅使用它来查询数据库?
  • 两者——无论好坏,我的所有数据都通过 ORM 进入数据库。

标签: python orm peewee


【解决方案1】:

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

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

【讨论】:

  • 是的,没错。有没有推荐的方法来简化重新查询?
  • 为您的模型添加了示例刷新方法
猜你喜欢
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 2021-04-01
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
相关资源
最近更新 更多