如何在 marshmallow-sqlalchemy 中使用嵌套对象加载
How to use load with nested objects in marshmallow-sqlalchemy
我正在使用带烧瓶扩展的 marshmallow-sqlalchemy 并尝试使用我的 ModelSchema class 的加载方法。
我有这样的东西:
db = SQLAlchemy()
ma = Marshmallow()
#I'm using Application Factorie
def create_app():
...
db.init_app(app)
ma.init_app(app)
...
return app
class BaseSchema(ma.ModelSchema):
class Meta:
sqla_session = db.session
class Parent(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(45), nullable=False)
child_id = db.Column(db.Integer, db.ForeignKey("child.id"), nullable=False)
child = db.relationship("Child")
class ParentSchema(BaseSchema):
class Meta:
model = Parent
child = ma.Nested("ChildSchema")
class Child(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(25), nullable=False)
class ChildSchema(BaseSchema):
class Meta:
model = Child
整体工作完美,查询,插入......但是当我尝试加载一个新的父对象与数据库中的现有子对象时,如:new_parent = ParentSchema().load({'name':'Foo', 'child' : {'id':1,'name':'Bar'} })
returns 它 AttributeError: 'DummySession' object has no attribute 'query'
.
我做错了什么?
我认为您的 BaseSchema 的 Meta class 没有被正确继承。
改变这个
class ParentSchema(BaseSchema):
class Meta:
model = Parent
至此
class ParentSchema(BaseSchema):
class Meta(BaseSchema.Meta):
model = Parent
参考:https://marshmallow-sqlalchemy.readthedocs.io/en/latest/recipes.html(基本架构 I 示例)
我正在使用带烧瓶扩展的 marshmallow-sqlalchemy 并尝试使用我的 ModelSchema class 的加载方法。 我有这样的东西:
db = SQLAlchemy()
ma = Marshmallow()
#I'm using Application Factorie
def create_app():
...
db.init_app(app)
ma.init_app(app)
...
return app
class BaseSchema(ma.ModelSchema):
class Meta:
sqla_session = db.session
class Parent(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(45), nullable=False)
child_id = db.Column(db.Integer, db.ForeignKey("child.id"), nullable=False)
child = db.relationship("Child")
class ParentSchema(BaseSchema):
class Meta:
model = Parent
child = ma.Nested("ChildSchema")
class Child(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(25), nullable=False)
class ChildSchema(BaseSchema):
class Meta:
model = Child
整体工作完美,查询,插入......但是当我尝试加载一个新的父对象与数据库中的现有子对象时,如:new_parent = ParentSchema().load({'name':'Foo', 'child' : {'id':1,'name':'Bar'} })
returns 它 AttributeError: 'DummySession' object has no attribute 'query'
.
我做错了什么?
我认为您的 BaseSchema 的 Meta class 没有被正确继承。
改变这个
class ParentSchema(BaseSchema):
class Meta:
model = Parent
至此
class ParentSchema(BaseSchema):
class Meta(BaseSchema.Meta):
model = Parent
参考:https://marshmallow-sqlalchemy.readthedocs.io/en/latest/recipes.html(基本架构 I 示例)