Django访问MySQL已有表报not enough arguments for format string如何解决
问题根因
报错是因为inspectdb自动生成的模型代码中,两个字段的db_column属性值包含未转义的%符号:
backup_copy_reduction_field对应的db_column='backup-copy-reduction%'clone_copy_reduction_field对应的db_column='clone-copy-reduction%'
Django底层构建SQL查询语句时会把%识别为参数格式化占位符,字段名中自带的%没有经过转义就会触发「format string参数不足」的报错。
解决方法
- 转义字段名中的
%符号:给两个字段db_column值里的%前额外加一个%完成转义,修改后代码如下:
backup_copy_reduction_field = models.FloatField(db_column='backup-copy-reduction%%', blank=True, null=True) # Field renamed to remove unsuitable characters. Field renamed because it ended with '_'. clone_copy_reduction_field = models.FloatField(db_column='clone-copy-reduction%%', blank=True, null=True) # Field renamed to remove unsuitable characters. Field renamed because it ended with '_'.
- 可选修复隐性问题:你当前
__str__方法直接返回BigIntegerField类型的self.ssid,不符合字符串返回要求,建议修改为:
def __str__(self): return str(self.ssid)
修改完成后重启Django服务即可解决报错。
内容的提问来源于stack exchange,提问作者Nikhil Yadavaram
相关产品推荐
相关产品推荐

