zoukankan      html  css  js  c++  java
  • 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")
  • 相关阅读:
    3.Appium运行时出现:Original error: Android devices must be of API level 17 or higher. Please change your device to Selendroid or upgrade Android on your device
    3.Python连接数据库PyMySQL
    2.Python输入pip命令出现Unknown or unsupported command 'install'问题解决
    2.Linux下安装Jenkins
    5.JMeter测试mysql数据库
    Android 4学习(7):用户界面
    Android 4学习(6):概述
    Android 4学习(5):概述
    Android 4学习(4):概述
    Android 4学习(3):概述
  • 原文地址:https://www.cnblogs.com/ppzhang/p/10273286.html
Copyright © 2011-2022 走看看