解决报错 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。

posted @   流水自净  阅读(687)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示