Django使用联合主键
今天闲着没事,突然想起一个以前遇到的一个小问题。一直忘了来验证自己的解决方案,所以今天特意来查询了些资料来验证下自己的想法。整理如下:
单张表内建立联合主键:
class IotTemp(models.Model):
mac = models.CharField(max_length=64, blank=False)
temperature = models.FloatField(default=0.0)
seq_no = models.IntegerField(blank=False, null=False)
time = models.DateTimeField(auto_now=False)
order_id = models.CharField(max_length=32, blank=True, null=True, verbose_name=u'订单id')
user = models.CharField(max_length=TEXT_LEN, blank=True, verbose_name=u'所属人')
#seq_no,order_id,mac作为联合主键保证数据不重复
class Meta:
app_label = 'iot'
unique_together = (("seq_no", "order_id", "mac"),)
verbose_name_plural = u"通用温度表"
关联表内建立联合主键:
class user(Model):
id=AutoField(primary_key=True)
name = CharField(max_length=30)
age =IntegerField()
class role(Model):
id=AutoField(primary_key=True)
name=CharField(max_length=10) #这是两个model有一个roleUser的model来描述use与role的关系,需要user的id与role的id做外键,也做联合主键,如下: class roleUser(Model):
userId=ForeignKey(user)
roleId=ForeignKey(role)
class Meta:
unique_together=("userId","roleId")
当使用Django的ORM来创建数据时,如果创建的数据已经存在,Django会对这个执行语句报错。
如果有一批数据要创建,不存在的直接创建存在的进行更新(类似于mysql的DUPLICATE KEY UPDATE)或者不进行任何操作(类似于mysql的ignore),那该如何来做么?
#存在则放弃
try:
temp = IotTemp.object.create(order_id=1,seq_no=1,mac="wode111",temperature=22.22,time="2018-08-08 11:11:11",user="admin")
except Exception as e:
pass #相当于ignore #存在则更新
try:
temp = IotTemp.object.create(order_id=1,seq_no=1,mac="wode111",temperature=22.22,time="2018-08-08 11:11:11",user="admin")
except Exception as e:
temp = IotTemp.object.filter(order_id=1,seq_no=1,mac="wode111").update(temperature=33.33,time="2019-09-09 22:22:22",user="admin")
Django使用联合主键的更多相关文章
- Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...
- SQL联合主键 查重
2014年最后一天,今天在给数据库导入数据的时候,遇到一个问题,就是联合主键去重. 事情是这样的,现有一个表M,我想找个表中导入了许多数据,并需要将字段A(int)和B(int)联合设置为主键. 但是 ...
- Hibernate注解映射联合主键的三种主要方式
今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误: org.springframework.beans.factory.BeanCreationException ...
- 联合主键用Hibernate注解映射的三种方式
第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为@Embeddable,最后在主类中(该类不包含联合主 ...
- EntityFramework中Mapper怎么定义联合主键?
HasKey(m => new { m.StoreId, m.CarTypeId, m.CarLevel}) 用“new {}”联合主键以“,”分隔形式定义
- SQL Server中的联合主键、聚集索引、非聚集索引、mysql 联合索引
我们都知道在一个表中当需要2列以上才能确定记录的唯一性的时候,就需要用到联合主键,当建立联合主键以后,在查询数据的时候性能就会有很大的提升,不过并不是对联合主键的任何列单独查询的时候性能都会提升,但我 ...
- sql,联合主键,按id分组求版本号最大值的集合
表结构如下: /* SQLyog v10.2 MySQL - 5.5.39 ************************************************************** ...
- JPA学习---第十二节:JPA中的联合主键
1.定义实体类,代码如下: (1).将联合主键放到一个类中,代码如下: package learn.jpa.entity; import java.io.Serializable; import ja ...
- Hibernate联合主键映射
1.联合主键的映射规则 1) 类中的每个主键属性都对应到数据表中的每个主键列. Hibernate要求具有联合主键的实体类实现Serializable接口,并且重写hashCode与equals方法, ...
随机推荐
- docker搭建redis集群
一.简介 docker作为一个容器技术,在搭建资源隔离性服务上具有很大的优势,在一台服务器上可以启动多个docker容器,感觉每个在容器里面部署的服务就像是部署在不同的服务器上.此次基于docker以 ...
- redis的rdb与aof持久化机制
Redis提供了两种持久化方案:RDB持久化和AOF持久化,一个是快照的方式,一个是类似日志追加的方式 RDB快照持久化 RDB持久化是通过快照的方式,即在指定的时间间隔内将内存中的数据集快照写入磁盘 ...
- python实现年会抽奖程序
用python来实现一个抽奖程序,供大家参考,具体内容如下 主要功能有 1.从一个csv文件中读入所有员工工号2.将这些工号初始到一个列表中3.用random模块下的choice函数来随机选择列表中的 ...
- 利用远程桌面管理winserver集群
在适用mstsc连接winserver服务器的场景下(别问为什么不VNC),可以利用rdp文件等方式减轻连接的操作负担 利用.rdp文件免密登录 rdp文件本质上是一个mstsc的选择,或者不如说ms ...
- ubuntu 文件编码格式 转换
正在学习jquery,之前在windows下弄的编码到了 ubuntu下,乱码: 找到一个方法: iconv : 源文件:a.htm 格式:gbk: 目标: a.html 格式:utf8: ic ...
- 微软面试题: LeetCode 91. 解码方法 出现次数:3
题目描述: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数. 示例 ...
- leetcode 30day--2
202. Happy Number Write an algorithm to determine if a number n is "happy". A happy number ...
- 分布式监控系统之Zabbix基础使用
前文我们了解了分布式监控系统zabbix的相关组件的作用和zabbix的部署,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13997582.html:今天我们 ...
- 在Linux中输入命令时打错并按了enter
今天在Linux中输入命令时,打错一个单词了,之后出现一串串的~,按ESC也没用, 并在底部出现:quit<enter> to exit vim 解决办法: 按几下 esc 确保 vim ...
- vector删除特定元素
删除vector中小于20的元素,注意要使迭代器失效,不能简单的删除. #include <iostream>#include <vector>using namespace ...