python - 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 之类的东西中获得的不错的输出
解决方案
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 中的分支(丑陋)
推荐阅读
- java - Spring Boot - 无法使用 thymeleaf 邮件模板添加内联图像
- r - R:使用填充和 facet_wrap 在图形上添加观察数
- c++ - 修改最小堆中的元素并在亚线性时间内重建堆
- node.js - 如何从Nodejs中的函数中提取变量
- objective-c - 如何找到推送了哪个 viewController?
- 3d - 处理 3:如何将轴保持在默认位置?
- javascript - 检测字符串中的链接并在Javascript中插入锚标记
- javascript - 计算碰撞数
- javascript - 如果用户是管理员,则显示/生成元素的安全方式
- python - 在数据框的一列中查找相同的值,并为每个重复项创建一个新的数据框