解决报错 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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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