Marshmallow_MongoEngine: ModuleNotFoundError: Нет модуля с именем «marshmallow.compat» - PullRequest
0 голосов
/ 24 апреля 2020

Я использую 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 \" ] а не приятный вывод, который я привык получать от чего-то вроде зефира- sql

1 Ответ

1 голос
/ 25 апреля 2020

marshmallow-mongoengine не совместим с marshmallow 3.

Была работа над этим, но она не была объединена (пока?): https://github.com/MongoEngine/marshmallow-mongoengine/pull/11.

Кстати, автор зефира-mongoengine написал ODM на основе зефира, umon go, который предназначен для того же, что и mongoengine + marshmallow-mongoengine.

Ваши варианты являются:

  • помочь портировать зефир-монгоинжин в зефир 3 или перейти к умону go (хорошо)
  • придерживаться зефир 2 (плохо)
  • использовать ответвление в зефире 3 совместимости PR выше в вашем коде (некрасиво)
...