问题描述
是否可以将字典列表反序列化为给定的架构?在文档中,您可以在模式对象中传递many
参数:
from marshmallow import Schema,fields
class UserSchema(Schema):
name = fields.str()
email = fields.Email()
created_at = fields.DateTime()
user1 = dict(name="Mick",email="mick@stones.com")
user2 = dict(name="Keith",email="keith@stones.com")
users = [user1,user2]
result = UserSchema().load(users,many=True)
print(result)
# [{'name': u'Mick',# 'email': u'mick@stones.com',# 'created_at': '2014-08-17T14:58:57.600623+00:00'}
# {'name': u'Keith',# 'email': u'keith@stones.com',# 'created_at': '2014-08-17T14:58:57.600623+00:00'}]
当单个对象对该架构无效时,它将停止整个过程,并且不会将任何数据保存到指定的变量中,而不得不借助for循环并尝试捕获异常,如下所示:>
from marshmallow import Schema,fields,ValidationError
class UserSchema(Schema):
name = fields.Str(required=True)
email = fields.Email()
created_at = fields.DateTime()
user1 = dict(name=None,user2]
result = []
errors = []
for user in users:
try:
result.append(UserSchema().load(user))
except ValidationError as error:
errors.append(dict(data=error.data,messages=error.messages))
print(result)
print(errors)
# [{'email': 'keith@stones.com','name': 'Keith'}]
# [{'data': {'name': None,'email': 'mick@stones.com'},'messages': {'name': ['Field may not be null.']}}]
所以我的问题是:有没有办法不必诉诸这种策略?类似于以下格式:
result,errors: UserSchema().load(users,many=True)
我尝试了上述方法,目前会引发错误(因为您无法将一个值分解为两个值)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)