SQLAlchemy Meta Class Marshmellow 中的自定义字段名称
Custom field names in SQLAlchemy Meta Class Marshmellow
我正在尝试使用 .dump
从我的 sqlAlchemy 查询中使用 marshmallow 来获得查询结果,但我想自定义字段的名称(与数据库 table 列不同name) 发送到前端。
所以如果我的 table 模式是:
class SomeRandomName(db.Model):
__tablename__ = 'some_random_name'
id = db.Column(db.Integer, primary_key=True)
time = db.Column(db.DateTime, default=datetime.utcnow)
title = db.Column(db.String(30), unique=False, nullable=True)
some_column_name = db.Column(db.String(30), unique=False, nullable=True)
我的 Marshmallow Schema 是:
class SomeRandomNameSchema(ma.Schema):
class Meta:
fields = ["time", "title", "some_column_name"]
响应将是:
[
{"time": "2020-07-17 07:18:44",
"title": "Some Title",
"some_column_name": false}
]
但我真正想要的是我的列名在 DB 中保持不变,但在 JSON 响应中更改 Key 而无需在 .dump
之后操作 JSON。
例如:
[
{"time": "2020-07-17 07:18:44",
"title": "Some Title",
"CulmnNameChanged": false}
]
我也尝试了 中的建议答案,但我最终得到一个空的 JSON 响应。
我获取数据的唯一方法是将 fields = ["time", "title", ...]
放入我的 Class Meta
因此,在按照评论中的要求创建可重现示例的过程中,我最终找到了答案,即通过将 many=True
添加到 Marshmallow 架构 class 中,因为我使用的是 .all()
在我的查询中,也使用 作为我的模式结构。
如果有人遇到问题,我将把它留在这里作为示例:
from app import db, ma
from marshmallow import fields
class Table(db.Model):
__tablename__ = 'table'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(30), unique=False, nullable=True)
class TableSchema(ma.Schema):
class Meta:
strict = True
newTitleName = fields.String(attribute="title")
def my_function():
_query = db.session.query(Table).all()
ser = TableSchema(many=True)
result = ser.dump(_query)
print(result)
my_function()
我正在尝试使用 .dump
从我的 sqlAlchemy 查询中使用 marshmallow 来获得查询结果,但我想自定义字段的名称(与数据库 table 列不同name) 发送到前端。
所以如果我的 table 模式是:
class SomeRandomName(db.Model):
__tablename__ = 'some_random_name'
id = db.Column(db.Integer, primary_key=True)
time = db.Column(db.DateTime, default=datetime.utcnow)
title = db.Column(db.String(30), unique=False, nullable=True)
some_column_name = db.Column(db.String(30), unique=False, nullable=True)
我的 Marshmallow Schema 是:
class SomeRandomNameSchema(ma.Schema):
class Meta:
fields = ["time", "title", "some_column_name"]
响应将是:
[
{"time": "2020-07-17 07:18:44",
"title": "Some Title",
"some_column_name": false}
]
但我真正想要的是我的列名在 DB 中保持不变,但在 JSON 响应中更改 Key 而无需在 .dump
之后操作 JSON。
例如:
[
{"time": "2020-07-17 07:18:44",
"title": "Some Title",
"CulmnNameChanged": false}
]
我也尝试了
我获取数据的唯一方法是将 fields = ["time", "title", ...]
放入我的 Class Meta
因此,在按照评论中的要求创建可重现示例的过程中,我最终找到了答案,即通过将 many=True
添加到 Marshmallow 架构 class 中,因为我使用的是 .all()
在我的查询中,也使用
如果有人遇到问题,我将把它留在这里作为示例:
from app import db, ma
from marshmallow import fields
class Table(db.Model):
__tablename__ = 'table'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(30), unique=False, nullable=True)
class TableSchema(ma.Schema):
class Meta:
strict = True
newTitleName = fields.String(attribute="title")
def my_function():
_query = db.session.query(Table).all()
ser = TableSchema(many=True)
result = ser.dump(_query)
print(result)
my_function()