博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django设置联合唯一约束 -- migrate时报错处理
阅读量:6495 次
发布时间:2019-06-24

本文共 777 字,大约阅读时间需要 2 分钟。

异常信息:

a unique database constraint for 2 or more fields together

场景描述:

对于ORM中多对多关系的中间表,如果该关系表是手动创建的,建表的时候,两个字段没有添加联合唯一约束;

系统运行一段时间后,若是需求变更,需要对其增加联合唯一约束,而当前的关系表中可能已存在重复数据了,那么在添加联合唯一约束,执行数据同步操作migrate的时候,就会报错;这时,可以参考这种处理方式。

推荐一篇博客:http://shineforever.blog.51cto.com/1429204/1729286

一个表的model中,根据生产环境需要,需要设置site和对应的cdn服务器ip是联合唯一的,最开始创建表的时候,没有考虑到这个问题,后来设置了联合唯一约束 unique_together,在同步数据migrate的时候,报错:a unique database constraint for 2 or more fields together

很明显数据库中有很多这两个字段重复的数据,所以要删除重复数据后再migrate就没问题了,但是怎么删除这些数据呢?

通过以下两个步骤即可:

1)CREATE TEMPORARY TABLE tmp_table SELECT * FROM 目标表;2)delete from 目标表 where id not in (select max(id) from tmp_table group by cdn_ipaddr,site_id);

说明:

创建临时表,把目标表的数据复制到临时表中;

删除目标表中数据,只留id最大的‘重复数据’即可!

转载于:https://www.cnblogs.com/hellojesson/p/6379487.html

你可能感兴趣的文章
Javascript学习7 - 脚本化浏览器窗口
查看>>
编译安装linux内核步骤
查看>>
CentOS5.6下安装Oracle10G软件 【保留报错经验】
查看>>
输出程序运行的时间(精确到微秒)
查看>>
递归和迭代之间的差
查看>>
添加Net4CollectionTypeFactory的原因
查看>>
VS2010中“工具>选项中的VC++目录编辑功能已被否决”解决方法
查看>>
如何创建可扩展表视图中的iOS 学习和拓展优化(有待更新)
查看>>
HDU 4869 Turn the pokers(思维+组合公式+高速幂)
查看>>
BZOJ1315 : Ural1557Network Attack
查看>>
JAVA - HashMap和HashTable
查看>>
Apache漏洞修复
查看>>
iOS开发小技巧--textField成为密码框,view加载完后textField获取焦点
查看>>
[Angular 2] implements OnInit, OnDestory for fetching data from server
查看>>
Linux下Postfix的配置和使用
查看>>
[LeetCode] Longest Substring with At Most K Distinct Characters 最多有K个不同字符的最长子串...
查看>>
MySql 查询表字段数
查看>>
C语言编写的PHP框架--yaf入门编程
查看>>
Building test programs
查看>>
如何删除mac通用二进制文件
查看>>