解决报错 Unknown column '*_image_url' in 'field list'
该报错直译为:数据库对应表格中没有 *_image_url 字段。
开门见山,解决方法
修改模型类字段 *_image_url 直接去掉 _url 即可。
问题重现:
模型类中定义了字段
*_image_url = models.ImageField()
Pycharm中看到数据库中出现的字段为: *_image_url
使用模型类查询数据库时,报错:
django.db.utils.OperationalError: (1054, "Unknown column 'tb_sku.*_image_url' in 'field list'")
解决过程
1、查询数据库 tb_sku表格 的确有 *_image_url 字段,一字不差。
查询模型类,模型类字段名为 *_image_url,类型为 ImageField。
2、思考无果后,决定尝试修改字段名,去掉_url,重新迁移模型类。
创建迁移文件成功,迁移失败,报错:
pymysql.err.OperationalError: (1054, "Unknown column '*_image_url' in 'tb_sku'")
django.db.utils.OperationalError: (1054, "Unknown column '*_image_url' in 'tb_sku'")
3、再注释掉初始化迁移文件中的 *_image_url
创建迁移文件失败。报错:
pymysql.err.OperationalError:(1060, "Duplicate column name '*_image'")
django.db.utils.OperationalError: (1060, "Duplicate column name '*_image'")
4、结合上面两条报错,数据库中没有 *_image_url 字段,而 *_image 字段重复定义。说明我通过PyCharm看到的数据库字段 *_image_url 其真名为 *_image。
接着证明猜想,不在执着数据库迁移,直接确认已经将模型类的该字段改成了 *_image,再次重启服务,发送请求,成功响应!
5、总结:定义模型类字段不要以 _url 结尾,在数据库迁移时,这个尾巴会被直接忽略掉,在数据库中创建的真实字段名没有这个尾巴。即使你在PyCharm中看到了该字段有 _url,其实是欺骗眼睛的。
6、有意思的是,当我为了写这个博客,去重现问题时发现,但我注释掉初始化迁移文件中的_url字段,模型类中该字段保留_url时,数据库迁移竟然成功了。我再去查看数据库(PyCharm中),发现有值的是*_image,没有值的是 *_image_url。也就是说, 由于新添加了 *_image_url 字段的,原来的 *_image_url 被打回了原形 *_image。
如果觉得本文有用,万望看官慷慨解囊,不吝打赏,激励本编提供更加优质的内容
[点击进行打赏](https://www.cnblogs.com/52note/p/16507868.html)