Warm tip: This article is reproduced from serverfault.com, please click

mysql-如何获取django“数据在行中列太长”错误以打印实际值?

(mysql - How do I get django "Data too long for column '' at row" errors to print the actual value?)

发布于 2020-11-28 01:09:54

我有一个Django应用程序。有时在生产中,当上传数据时,其中一个值太长会出错。如果我可以看到哪个值超过了限制,这将对调试非常有帮助。我可以以某种方式配置它吗?我正在使用MySQL。

如果可以在每个模型或列的基础上启用/禁用此功能,这样也不会将用户数据泄漏到错误日志中,那也很好。

Questioner
Boris
Viewed
11
Melvyn 2020-11-29 05:39:58

在从外部来源创建模型实例时,必须注意验证输入或具有其他保证,即此数据不会违反约束。

当不至少full_clean()在模型上调用,而是直接调用时save,将绕过Django的验证器,并且只会由数据库驱动程序发出有关该问题的警报,这时很难获取诊断信息:


class JsonImportManager(models.Manager):
    def import(self, json_string: str) -> int:
        data_list = json.loads(json_string)  # list of objects => list of dicts
        failed = 0
        for data in data_list:
            obj = self.model(**data)
            try:
                obj.full_clean()
            except ValidationError as e:
                print(e.message_dict)  # or use better formatting function
                failed += 1
            else:
                obj.save()

        return failed

这当然很简单,但是这是一个很好的入门模板。