检测SQLAlchemy模型是否具有与i关联的挂起写入操作

2024-10-02 10:21:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个应用程序,在该应用程序中,我对一个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_atmodified_by数据。是否可以检查SQLA实例上的sqla_instance.was_modifiedsqla_instance.update_pending之类的内容来确定是否执行了修改?你知道吗

(我认识到我可以维护自己的was_modified布尔值,但由于存在许多if/then子句,因此如果可能的话,我希望避免使用很多样板。)


FWIW:这是一个python2.7pyramids应用程序,在web请求的上下文中从MySQL数据库读取数据。你知道吗


Tags: 对象instancein数据库应用程序sqlifvalidate
3条回答

SQL Alchemy ORM提供的会话对象具有两个属性,可以帮助您执行以下操作:

1)Session.is_modified()

2)Session.dirty

根据要跟踪的修改字段的数量,您可以使用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()

session对象提供事件,这可能会对您有所帮助。 只要复习一次, >;会话对象暂时变为挂起状态

相关问题 更多 >

    热门问题