首页 > 解决方案 > Marshmallow_MongoEngine:ModuleNotFoundError:没有名为“marshmallow.compat”的模块

问题描述

我将 MongoDB 与 MongoEngine 一起使用,并尝试使用 Marshmallow_MongoEngine 进行序列化/反序列化。

我的代码如下:

import marshmallow_mongoengine as ma

from models.profile import Profile

class ProfileSchema(ma.ModelSchema):
    class Meta:
        model = Profile

我得到的错误是: ModuleNotFoundError: No module named 'marshmallow.compat'

部分引用是:

  File ".../lib/python3.7/site-packages/marshmallow_mongoengine/__init__.py", line 11, in <module>
    from marshmallow_mongoengine.schema import (
  File ".../lib/python3.7/site-packages/marshmallow_mongoengine/schema.py", line 6, in <module>
    from marshmallow.compat import with_metaclass

似乎该错误是调用 with_metaclass 的结果,据我所知,它最初是在 Marshmallow 中用于向后兼容 Python 2.x 并且不再使用。有针对这个的解决方法吗?或者另一种方式来序列化/反序列化与数据库之间的数据?

PS 我曾尝试使用 json_util.dumps,但它以这种格式返回我的值:[\"_id\", \"name\"],而不是我习惯从 marshmallow-sql 之类的东西中获得的不错的输出

标签: pythonmongodbmongoenginemarshmallow

解决方案


marshmallow-mongoengine 与 marshmallow 3 不兼容。

已经有这方面的工作,但尚未合并(还没有?):https ://github.com/MongoEngine/marshmallow-mongoengine/pull/11 。

顺便说一句,marshmallow-mongoengine 的作者写了一个基于 marshmallow 的 ODM,umongo,这意味着做与 mongoengine + marshmallow-mongoengine 相同的事情。

您的选择是:

  • 帮助将 marshmallow-mongoengine 移植到 marshmallow 3 或移至 umongo(好)
  • 坚持棉花糖2(坏)
  • 在您的代码中使用上述棉花糖 3 兼容性 PR 中的分支(丑陋)

推荐阅读