如何使用SqlAlchemy-Marshmallow更改字段名称?

时间:2019-03-19 18:36:47

标签: python sqlalchemy marshmallow

我正在使用SQLAlchemy-棉花糖进行架构创建,大致如下:

class someModel(db.Model):
  y_x = db.Column(db.BigInteger, primary_key = True)

class someSchema(ma.ModelSchema):
  class Meta:
    model = someModel

我遇到的问题是我要使用的JSON对象具有属性x,{“ x”:1},而不是y_x。模式有没有办法识别这一点?我知道在棉花糖中,您可以执行y = fields.Integer(data_key =“ x”) 但是我不确定这是否适用于棉花糖瓶,是否可以在model = someModel之后添加。

2 个答案:

答案 0 :(得分:0)

SqlAlchemy-Marshmallow提供了一些有关如何使用ModelSchema的示例,其中一个Overriding generated fields符合您的需求:

  

由ModelSchema生成的任何字段都可以覆盖。

例如,您可以简单地手动指定field对象的字段和use the attribute parameter

from marshmallow import fields

class someSchema(ma.ModelSchema):
    x = fields.Integer(attribute='y') # Or vice-versa
    class Meta:
        model = someModel

答案 1 :(得分:0)

我遇到了这个确切的问题,并尝试通过向我的模式定义添加手动字段替代来解决它。这在从模型自动生成的字段与我手动定义的字段之间造成了冲突。事实证明,如果您手动覆盖字段,则需要通过将其明确标记为Meta类中的排除对象来将其从推理中排除。这样的事情最终对我有用:

class FooSchema(ma.ModelSchema):
    id = fields.Integer(attribute="foo_id")
    class Meta:
       model = Foo
       exclude = ["foo_id"]

希望这可以节省一些人通过棉花糖-SQLAlchemy源进行挖掘的时间。