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")
<div class="clear"></div>
<div id="post_next_prev">
<a href="https://www.cnblogs.com/ppzhang/p/10265619.html" class="p_n_p_prefix">« </a> 上一篇: <a href="https://www.cnblogs.com/ppzhang/p/10265619.html" data-featured-image="" title="发布于 2019-01-14 10:42">Django-View中绕过RSCF验证</a>
<br>
<a href="https://www.cnblogs.com/ppzhang/p/10277974.html" class="p_n_p_prefix">» </a> 下一篇: <a href="https://www.cnblogs.com/ppzhang/p/10277974.html" data-featured-image="" title="发布于 2019-01-16 16:57">记一次MongoDB的失败导出</a>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!