检测 SQLAlchemy 模型是否有与其关联的挂起的写操作
Detect if a SQLAlchemy model has pending write operations associated with it
我有一个应用程序,我在其中查询 SQL 数据库并最终得到一个代表给定行的 SQL Alchemy 对象。然后,根据用户输入和一系列 if/then 语句,我可以对 SQLA 对象执行更新。
即
if 'fooinput1' in payload:
sqla_instance.foo1 = validate_foo1(fooinput1)
if 'fooinput2' in payload:
sqla_instance.foo2 = validate_foo2(fooinput2)
...
我现在需要向该系统添加 modified_at
和 modified_by
数据。是否可以检查 SQLA 实例上的某些内容,例如 sqla_instance.was_modified
或 sqla_instance.update_pending
以确定是否执行了修改?
(我知道我可以维护我自己的 was_modified
布尔值,但是因为有很多这样的 if/then 子句会导致很多样板,如果可能。)
FWIW:这是一个 python 2.7 金字塔应用程序,在 Web 请求的上下文中从 MySQL 数据库读取数据。
Alchemy ORM 提供的会话对象 SQL 有两个属性可以帮助您完成您正在尝试做的事情:
session对象提供事件,可能对你有帮助。
只复习一次,
--> 过渡到会话对象的挂起状态
根据您要跟踪修改的字段数量,您可以使用 ORM Events:
实现您需要的
@sa.event.listens_for(Thing.foo, 'set')
def foo_changed(target, value, oldvalue, initiator):
target.last_modified = datetime.now()
@sa.event.listens_for(Thing.baz, 'set')
def baz_changed(target, value, oldvalue, initiator):
target.last_modified = datetime.now()
我有一个应用程序,我在其中查询 SQL 数据库并最终得到一个代表给定行的 SQL Alchemy 对象。然后,根据用户输入和一系列 if/then 语句,我可以对 SQLA 对象执行更新。
即
if 'fooinput1' in payload:
sqla_instance.foo1 = validate_foo1(fooinput1)
if 'fooinput2' in payload:
sqla_instance.foo2 = validate_foo2(fooinput2)
...
我现在需要向该系统添加 modified_at
和 modified_by
数据。是否可以检查 SQLA 实例上的某些内容,例如 sqla_instance.was_modified
或 sqla_instance.update_pending
以确定是否执行了修改?
(我知道我可以维护我自己的 was_modified
布尔值,但是因为有很多这样的 if/then 子句会导致很多样板,如果可能。)
FWIW:这是一个 python 2.7 金字塔应用程序,在 Web 请求的上下文中从 MySQL 数据库读取数据。
Alchemy ORM 提供的会话对象 SQL 有两个属性可以帮助您完成您正在尝试做的事情:
session对象提供事件,可能对你有帮助。 只复习一次, --> 过渡到会话对象的挂起状态
根据您要跟踪修改的字段数量,您可以使用 ORM Events:
实现您需要的@sa.event.listens_for(Thing.foo, 'set')
def foo_changed(target, value, oldvalue, initiator):
target.last_modified = datetime.now()
@sa.event.listens_for(Thing.baz, 'set')
def baz_changed(target, value, oldvalue, initiator):
target.last_modified = datetime.now()