gpt4 book ai didi

python - 强制加载 `None` 并在转储时跳过 `None`

转载 作者:太空狗 更新时间:2023-10-30 01:33:30 27 4
gpt4 key购买 nike

我正在使用 marshmallow 2.0.0rc2 验证 HTTP 请求的输入数据,并在 HTTP 响应上将 SQLAlchemy 模型加载到 JSON。我偶然发现了两个问题:

首先,在通过 HTTP PUT 请求从 JSON 加载数据时,我想将所有缺失的字段填充为 None,以正确覆盖 SQLAlchemy 中的数据。现在我正在使用以下代码:

for name, field in schema.fields.iteritems():
if field.missing == ma.missing:
schema.fields[name].missing = None

它有效,但我想它有问题,因为我正在弄乱附加到 Schema 类的 marshmallow.Field 实例。在处理 Schema 实例之后,我们修补的所有字段都将卡住新的缺失而不是默认的。

其次,在将数据从 SQLAlchemy 转储到 JSON 时,所有缺失的字段都被解析为 None,并且 JSON 填充了 {"key": null, } 数据。这是不需要的行为,我正在 post_dump 触发器上清理它们。

@post_dump
def clean_missing(self, data):
for key in filter(lambda key: data[key] is None, data):
data.pop(key)
return data

与之前一样,它可以工作,但包括创建一些 BaseSchema 类女巫将此逻辑传递给所有继承的类。

我已经搜索了一段时间的文档,但没有找到任何正确的方法来交换此行为,即在转储时跳过字段并在加载时使用 None 填充字段。我错过了什么或者棉花糖不提供这样的功能吗?

最佳答案

要强制加载 None,您可以使用 missing parameter :

missing – Default deserialization value for the field if the field is not found in the input data. May be a value or a callable.

class ExampleSchema(Schema):
field_a = fields.Int(missing=None)

关于你的第二点,docs似乎说从 2.0 开始,缺失的字段被排除在序列化输出之外。

关于python - 强制加载 `None` 并在转储时跳过 `None`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32740745/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com