我正在使用MongoEngine并尝试创建一个像SQLAlchemy的PickleType字段一样的字段。基本上,我只需要在将对象写入数据库之前对其进行腌制,并在对象重新加载时对其进行解开。
然而,看起来MongoEngine的字段并没有提供我可以覆盖的正确转换方法,而是有两种强制方法(to_python
和to_mongo
)。如果我理解正确,可以随时调用这些函数,也就是说,对to_python(v)
的调用并不能保证v
来自数据库。我曾想过写这样的东西:
class PickleField(fields.BinaryField):
def to_python(self, value):
value = super().to_python(value)
if <<value was pickled by the field>>
return pickle.loads(value)
else:
return value
不幸的是,如果我想尽可能地保持一般性,我就没有办法检查该值是否应该被打开。例如,
a = pickle.dumps(x)
PickleField().to_python(a) # should return a, will return x
我也不认为我可以在PickleField中存储任何州,因为所有州都共享这些州。
有解决方法吗?