我最近经常使用 MongoEngine。除了 MongoDB 集成之外,我喜欢明确定义实体结构的想法。字段定义使代码更容易理解。此外,使用这些定义,我可以验证对象以捕获潜在的错误或更准确地序列化/反序列化它们。
MongoEngine 的问题在于它是专门为与存储引擎一起工作而设计的。这同样适用于 Django 和 SQLAlchemy 模型,它们也缺少列表和集合类型。那么,我的问题是,是否有 Python 的对象模式/模型库可以进行自动对象验证和序列化,但没有对象关系映射或任何其他花哨的东西?
让我举个例子吧。
class Wheel(Entity):
radius = FloatField(1.0)
class Bicycle(Entity):
front = EntityField(Wheel)
back = EntityField(Wheel)
class Owner(Entity):
name = StringField()
bicycles = ListField(EntityField(Bicycle))
owner = Owner(name='Eser Aygün', bicycles=[])
bmx = Bicycle()
bmx.front = Wheel()
bmx.back = Wheel()
trek = Bicycle()
trek.front = Wheel(1.2)
trek.back = Wheel(1.2)
owner.bicycles.append(bmx)
owner.bicycles.append(trek)
owner.validate() # checks the structure recursively
给定结构,序列化和反序列化对象也很容易。例如,owner.jsonify()
可能返回字典
{
'name': 'Eser Aygün',
'bicycles': [{
'front': {
radius: 1.0
},
'back': {
radius: 1.0
}
}, {
'front': {
radius: 1.2
},
'back': {
radius: 1.2
}
}],
}
并且您可以轻松地将其转换回调用owner.dejsonify(dic)
。