最近は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)
。