SQLAlchemy 提供 PickleType
并提供 mutation tracking对于任何可变类型(如字典)。
SQLAlchemy 文档提到这是实现可变 PickleType
的方法,但它没有说明具体如何进行。
注意:我想在 PickleType
中存储一个字典。
你是如何实现的?
最佳答案
虽然文档中提到了一些示例,但在我看来还不够,所以我将在此处添加我的实现,该实现可用于实现经过 pickle 并存储在数据库中的可变字典。
使用 MutableDict
文档中的示例:
class MutableDict(Mutable, dict):
@classmethod
def coerce(cls, key, value):
if not isinstance(value, MutableDict):
if isinstance(value, dict):
return MutableDict(value)
return Mutable.coerce(key, value)
else:
return value
def __delitem(self, key):
dict.__delitem__(self, key)
self.changed()
def __setitem__(self, key, value):
dict.__setitem__(self, key, value)
self.changed()
def __getstate__(self):
return dict(self)
def __setstate__(self, state):
self.update(self)
现在创建一个要跟踪的列:
class MyModel(Base):
data = Column(MutableDict.as_mutable(PickleType))
我想看看其他一些可能更高级或可能使用不同数据结构的示例。 pickle
的通用方法是什么样的?有没有(我想没有,或者 SQLAlchemy 会有)。
关于python - 如何实现自动更新的可变 PickleTypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15373583/