Marshmallow_MongoEngine: ModuleNotFoundError.没有名为'marshmallow.compat'的模块。没有名为'marshmallow.compat'的模块。

问题描述 投票:0回答:1

我正在使用MongoDB与MongoEngine,并试图用Marshmallow_MongoEngine进行serializedeserialize。

我的代码如下。

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,现在已经不再使用了。有什么办法解决这个问题吗?或者有其他的方法可以将数据序列化,并从DB中序列化出来?

P.S.我试过使用json_util.dumps,但它以这种格式返回我的值。[\"_id\", \"name"\"] 而不是像Marshmallow -sql这样的好的输出结果

python mongodb mongoengine marshmallow
1个回答
1
投票

marshmallow-mongoengine与marshmallow 3不兼容。

一直在做这方面的工作,但它还没有被合并(尚未?https:/github.comMongoEnginemarshmallow-mongoenginepull11。.

另外,棉花糖-mongoengine的作者写了一个基于棉花糖的ODM。乌蒙戈,那是为了和mongoengine+marshmallow-mongoengine一样。

你的选择是:

  • 帮助将marshmallow-mongoengine移植到marshmallow 3或者转移到umongo(好)
  • 坚守棉花糖2(坏)
  • 在你的代码中使用上面Marshmallow 3兼容性PR中的分支(丑)。
© www.soinside.com 2019 - 2024. All rights reserved.