Django:数据库插入英文学号成功,删除英文学号失败

1 错误复盘

1.1 场景复现

插入纯数字的教师学号成功,删除纯数字的教师学号成功。
插入带英文的教师学号成功,删除带英文的教师学号失败。

我的数据库里面有下面这条数据,教师工号,插入成功,但是删除失败。
在这里插入图片描述
报错:(1292, “Truncated incorrect DOUBLE value: ‘L16846’”)
在这里插入图片描述
显示我的值是DOUBLE。但是我检查models.py 和数据库的表单,类型是CharField和varchar。查询的时候,把id当做tea_id?
在这里插入图片描述
在这里插入图片描述

1.2 原因:修改models.py后,migrate操作的问题

1、有没有注意到models.py里面把tea_id设为了主键,但是数据库里的主键是id,而不是tea_id。
2、最开始我没有把tea_id设为主键,所以这个表单默认使用id作为主键。
3、后面我在models.py里面把tea_id设为主键(也更改了其他几个表单),重新migrate的时候,出现了报错,然后我在后端代码app/migrations里面,把0001_initial.py以及之后的migrate记录都删掉了。
4、但是数据库migrate的缓存还在。如果把下面的几个文件删了,还是会报错。
在这里插入图片描述

2、解决方案

2.1 解决方案1

如果网站没有上线,可以先备份数据库的数据,删除所有表单,再重新migrate,再导入数据。
我用的是此方案,因为我也不知道还有多少models配置没有同步成功。
重新migrate之后我的teacher表单变成下面的样子:
在这里插入图片描述
和之前相比,1、没有id,2、tea_id变成了主键。
再次插入英文教师号和删除英文教师号,成功!

2.2 解决方案2

你可以试试把后端的数据库的tea_id改成主键,并把id的主键去掉,改成如上图的样子。
只要定义的models表单和数据库一样就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brave Seeker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值