我正在使用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之后添加。
答案 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源进行挖掘的时间。