确定 SQLAlchemy 对象上的哪些字段是脏的
Determine which fields are dirty on an SQLAlchemy object
我知道,使用 SQLAlchemy 的 session
对象我可以调用 session.dirty
来获取所有需要提交到数据库的更改的对象。但是我如何确定任何一个对象上的哪些特定字段是脏的?是否有一种方法可以调用 returns 这些字段的特定对象?或者我可以将对象传递给 session
的 class 方法之一来获取它?
示例来自 History
class:
from sqlalchemy import inspect
hist = inspect(myobject).attrs.myattribute.history
如果您想检查给定对象实例的所有已定义属性,您可能会这样做:
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())
我知道,使用 SQLAlchemy 的 session
对象我可以调用 session.dirty
来获取所有需要提交到数据库的更改的对象。但是我如何确定任何一个对象上的哪些特定字段是脏的?是否有一种方法可以调用 returns 这些字段的特定对象?或者我可以将对象传递给 session
的 class 方法之一来获取它?
示例来自 History
class:
from sqlalchemy import inspect
hist = inspect(myobject).attrs.myattribute.history
如果您想检查给定对象实例的所有已定义属性,您可能会这样做:
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())