嵌套结构时棉花糖反序列化失败

melchoir55

我试图用棉花糖反序列化一个深层结构。例如:

hour = {
    'day': {
        'name': 'monday'
    }
}
loaded_hour, error = HoursSerializationSchema().load(hour) # this works

new_practitioner_at_location = {
    'hours': [
        hour
    ]
}
loaded, error = PractitionerToServiceLocationSerializationSchema().load(new_practitioner_at_location) # this fails

当我尝试反序列化时,new_practitioner_at_location我得到以下信息(在序列化程序处理“day”键时发生):

AttributeError: 'dict' object has no attribute '_sa_instance_state'

请注意,当该结构未嵌套在new_practitioner_at_location.

显示问题的自包含脚本:

from sqlalchemy import Column, Integer, ForeignKey, String
from sqlalchemy.orm import relationship, backref
from sqlalchemy.ext.declarative import declarative_base
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
from flask_migrate import Migrate

base = declarative_base()


class HoursDay(base):
    __tablename__ = 'HoursDay'
    uid = Column(Integer, primary_key=True)

    name = Column(String)

    hour_id = Column(Integer, ForeignKey('Hours.uid'))
    hour = relationship("Hours", back_populates="day")

    def __init__(self, **kwargs):
        super().__init__(**kwargs)


class Hours(base):
    __tablename__ = 'Hours'
    uid = Column(Integer, primary_key=True)

    practitioner_at_location_id = Column(Integer, ForeignKey('PractitionerToServiceLocation.uid'))
    practitioner_at_location = relationship('PractitionerToServiceLocation', back_populates="hours")

    day = relationship(HoursDay, uselist=False, back_populates="hour")

    def __repr__(self):
        return f'<Hours {self.uid}>'


class PractitionerToServiceLocation(base):
    """
    A practitioner practices at a number of service locations.
    """
    __tablename__ = 'PractitionerToServiceLocation'
    uid = Column(Integer, primary_key=True)

    hours = relationship("Hours", back_populates="practitioner_at_location")

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def __repr__(self):
        return f'<PractitionerToServiceLocation {self.uid}>'


app = Flask(__name__)
app.config.from_object(os.environ['APP_SETTINGS'])
db = SQLAlchemy(app, model_class=base)
ma = Marshmallow(app)
migrate = Migrate(app, db)

from marshmallow import fields


class HoursDaySerializationSchema(ma.ModelSchema):
    class Meta:
        model = HoursDay


class HoursSerializationSchema(ma.ModelSchema):
    class Meta:
        model = Hours

    day = fields.Nested(HoursDaySerializationSchema)


class PractitionerToServiceLocationSerializationSchema(ma.ModelSchema):
    class Meta:
        model = PractitionerToServiceLocation

        hours = fields.Nested('HoursSerializationSchema', many=True)


if __name__ == "__main__":
    hour = {
        'day': {
            'name': 'monday'
        }
    }
    loaded_hour, error = HoursSerializationSchema().load(hour) # this works

    new_practitioner_at_location = {
        'hours': [
            hour
        ]
    }
    loaded, error = PractitionerToServiceLocationSerializationSchema().load(new_practitioner_at_location) # this fails
    print('hi')

更新:

我认为正在发生的事情是棉花糖HoursDay在尝试反序列化new_practitioner_at_locationdict没有尝试反序列化对象如果我backpopulates从该HoursDay.hour字段中删除该行为,那么您可以看到它只是将未序列化的数据结构分配给该字段。这对我来说毫无意义,特别是因为当您直接反序列化hourdict 而不是将其嵌入到new_practitioner_at_location. 任何帮助,将不胜感激。

盗贼大师

这是一个简单的类似错字的错误:

class PractitionerToServiceLocationSerializationSchema(ma.ModelSchema):
    class Meta:
        model = PractitionerToServiceLocation

        hours = fields.Nested('HoursSerializationSchema', many=True)

您正在定义hoursinside class Meta,但它需要在您的架构中:

class PractitionerToServiceLocationSerializationSchema(ma.ModelSchema):
    class Meta:
        model = PractitionerToServiceLocation

    hours = fields.Nested('HoursSerializationSchema', many=True)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用棉花糖python反序列化模型中的json模型

来自分类Dev

使用棉花糖python反序列化模型中的json模型

来自分类Dev

用棉花糖序列化两个嵌套模式

来自分类Dev

反序列化嵌套的JSON结构时,Serde返回SyntaxError“期望值”

来自分类Dev

如何用棉花糖序列化MongoDB ObjectId?

来自分类Dev

如何用棉花糖序列化MongoDB ObjectId?

来自分类Dev

用棉花糖序列化日期时间的简便方法

来自分类Dev

序列化/反序列化平面结构中的嵌套对象

来自分类Dev

如何将上下文传递给棉花糖中的嵌套序列化器?

来自分类Dev

序列化可选的嵌套结构:QueryDict和normal dict之间的区别?

来自分类Dev

树结构的Jackson序列化/反序列化

来自分类Dev

序列化和反序列化嵌套类

来自分类Dev

从API反序列化嵌套的json

来自分类Dev

SQLAlchemyAutoSchema嵌套反序列化

来自分类Dev

反序列化OData嵌套响应

来自分类Dev

反序列化嵌套JSON

来自分类Dev

难以反序列化嵌套JSON

来自分类Dev

Servicebustrigger 反序列化失败

来自分类Dev

使用sqlalchemy棉花糖难以序列化Geography列类型

来自分类Dev

如何启用棉花糖枚举EnumField来更正序列化EnumField?

来自分类Dev

棉花糖序列化 - 一种基于每个字段捕获异常的方法?

来自分类Dev

反序列化JSON时的进度

来自分类Dev

反序列化JSON时出错

来自分类Dev

serialize:将数据结构反序列化到JSON /从JSON反序列化

来自分类Dev

从消息队列反序列化多个结构时,如何避免“ boost :: archive :: archive_exception”?

来自分类Dev

从消息队列反序列化多个结构时,如何避免“ boost :: archive :: archive_exception”?

来自分类Dev

尝试反序列化对象时,JsonSerializer C#返回null结构

来自分类Dev

当嵌套对象具有名称空间时如何反序列化XML

来自分类Dev

当嵌套对象具有名称空间时如何反序列化XML

Related 相关文章

  1. 1

    使用棉花糖python反序列化模型中的json模型

  2. 2

    使用棉花糖python反序列化模型中的json模型

  3. 3

    用棉花糖序列化两个嵌套模式

  4. 4

    反序列化嵌套的JSON结构时,Serde返回SyntaxError“期望值”

  5. 5

    如何用棉花糖序列化MongoDB ObjectId?

  6. 6

    如何用棉花糖序列化MongoDB ObjectId?

  7. 7

    用棉花糖序列化日期时间的简便方法

  8. 8

    序列化/反序列化平面结构中的嵌套对象

  9. 9

    如何将上下文传递给棉花糖中的嵌套序列化器?

  10. 10

    序列化可选的嵌套结构:QueryDict和normal dict之间的区别?

  11. 11

    树结构的Jackson序列化/反序列化

  12. 12

    序列化和反序列化嵌套类

  13. 13

    从API反序列化嵌套的json

  14. 14

    SQLAlchemyAutoSchema嵌套反序列化

  15. 15

    反序列化OData嵌套响应

  16. 16

    反序列化嵌套JSON

  17. 17

    难以反序列化嵌套JSON

  18. 18

    Servicebustrigger 反序列化失败

  19. 19

    使用sqlalchemy棉花糖难以序列化Geography列类型

  20. 20

    如何启用棉花糖枚举EnumField来更正序列化EnumField?

  21. 21

    棉花糖序列化 - 一种基于每个字段捕获异常的方法?

  22. 22

    反序列化JSON时的进度

  23. 23

    反序列化JSON时出错

  24. 24

    serialize:将数据结构反序列化到JSON /从JSON反序列化

  25. 25

    从消息队列反序列化多个结构时,如何避免“ boost :: archive :: archive_exception”?

  26. 26

    从消息队列反序列化多个结构时,如何避免“ boost :: archive :: archive_exception”?

  27. 27

    尝试反序列化对象时,JsonSerializer C#返回null结构

  28. 28

    当嵌套对象具有名称空间时如何反序列化XML

  29. 29

    当嵌套对象具有名称空间时如何反序列化XML

热门标签

归档