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")
  • 相关阅读:
    窗体的扩展样式GWL_EXSTYLE用于SetWindowLong
    内存映射对于大文件的使用
    Delphi实现全局鼠标钩子
    全局键盘钩子(WH_KEYBOARD)
    实现拦截API的钩子(Hook)
    JBoss + EJB3 + MySql : 开发第一个EJB
    取PE文件的引入表和导出表
    Webbrowser中模拟连接点击(非鼠标模拟)
    打造无DLL版穿透防火墙Downloader
    Delphi 常用属性+方法+事件+代码+函数
  • 原文地址:https://www.cnblogs.com/ppzhang/p/10273286.html
Copyright © 2011-2022 走看看