Как десериализовать структуру bjson в схему зефира

Я пытаюсь преобразовать структуру bjson в схему из библиотеки зефира.

Ниже приведена схема зефира:

class GeneSchema(Schema):
"""description of class"""

   id_entrez = fields.Integer(required = True, error_messages={'required': "The 'id_entrez' field is requeired."})
   symbol = fields.String()

   @validates('id_entrez')
   def validate_id_entrez(self, data):
       if data <= 0:
          raise ValidationError("The 'id_entrez' field must be greater than zero.")

Ниже bjson будет преобразован в схему:

[{"symbol": "VAMP4", "_id": {"$oid": "57ae3b175a945932fcbdf41d"}, "id_entrez": 8674}, {"symbol": "CCT5", "_id": {"$oid": "57ae3b175a945932fcbdf41e"}, "id_entrez": 22948}]

Обратите внимание, что bjson имеет "_id" в качестве ObjectId - "$oid". Это потому, что результат запроса с использованием mongodb.

Пожалуйста, кто-нибудь знает, почему бы не правильно конвертировать из bjson в схему зефира?

Спасибо вам всем!

2 ответа

Я не знаю, актуален ли этот вопрос, но я хотел бы показать свое решение, как передать ObjectId в схему Marshmallow:

Я просто использую метод предварительной обработки pre_load для преобразования ObjectId в строку:

      @pre_load
def convert_objectid(self, in_data, **kwargs):
    if "_id" in in_data:
        in_data["_id"] = str(in_data["_id"])
    return in_data

Вы все еще можете использовать свою схему для анализа выходных данных MongoDB, просто игнорируйте дополнительное поле "_id". Если, с другой стороны, вы хотите проанализировать этот "_id", просто добавьте дополнительное необязательное поле в вашу схему.

Другие вопросы по тегам