Marshmallow_MongoEngine: ModuleNotFoundError: No module named 'marshmallow.compat'

Marshmallow_MongoEngine: ModuleNotFoundError: No module named 'marshmallow.compat'

我将 MongoDB 与 MongoEngine 一起使用,并尝试 serialize/deserialize 与 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 向后兼容的,现在不再使用了。有针对这个的解决方法吗?或者另一种 serialize/deserialize 数据进出数据库的方式?

P.S。 我曾尝试使用 json_util.dumps,但它 returns 我的值采用这种格式:[\"_id\", \"name\"] 而不是我习惯从中获得的良好输出棉花糖之类的东西-sql

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(差)
  • 在你的代码中使用上面 marshmallow 3 兼容性 PR 中的分支(丑陋)