确定 SQLAlchemy 对象上的哪些字段是脏的

J-b*_*bob 9 postgresql sqlalchemy

我知道,使用 SQLAlchemy 的session对象,我可以调用session.dirty获取所有需要提交到数据库的更改的对象。但是如何确定任何一个对象上的哪些特定字段是脏的?有没有可以在返回这些字段的特定对象上调用的方法?或者我可以将对象传递给session的类方法之一来获取它?

van*_*van 12

History课堂上的一个例子:

from sqlalchemy import inspect

hist = inspect(myobject).attrs.myattribute.history
Run Code Online (Sandbox Code Playgroud)

如果您想检查给定对象实例的所有已定义属性,您可能可以执行以下操作:

def print_changes(myobj):
    from sqlalchemy.orm import class_mapper
    from sqlalchemy import inspect
    inspr = inspect(myobj)
    attrs = class_mapper(myobj.__class__).column_attrs  # exclude relationships
    for attr in attrs:
        hist = getattr(inspr.attrs, attr.key).history
        print(attr.key, hist.has_changes())
Run Code Online (Sandbox Code Playgroud)