Django model 中设置联合约束和联合索引的方法

yipeiwu_com5年前Python基础

在Django model中对一张表的几个字段进行联合约束和联合索引,例如在购物车表中,登录的用户和商品两个字段在一起表示唯一记录。

举个栗子:

Django model中购物车表

class Cart(models.Model):
  user = models.ForeignKey(
    MyUser,
    verbose_name="用户"
  )
  goods = models.ForeignKey(
    Goods,
    verbose_name="商品"
  )
  num = models.IntegerField(
    verbose_name="商品数量"
  )
  is_select = models.BooleanField(
    default=True,
    verbose_name="选中状态"
  )
 
  class Meta:
    # 联合约束  其中goods和user不能重复
    unique_together = ["goods", "user"]
    # 联合索引
    index_together = ["user", "goods"]

unique_together = ["goods", "user"] 表示联合约束,其中"goods"和"user"表示不能重复,不能一样。

index_together = ["user", "goods"] 表示联合索引,其中"goods"和"user"联合同步查询,提高效率。

联合索引的优势

示例SQL:select * from person where a=100 and b=100 and c=1000;

​假设你的数据有一千万条 每次条件过滤 省10%的数据

1 如果三个单索引 先拿a的索引找 剩下100万数据 然后拿b条件找 剩十万 再c条件找 最后得到一万数据

2 如果是联合索引 他 一千万数据*10% * 10% * 10% 直接得到一万条数据

建立联合索引的同时 还会给他们之间的组合建立索引

以上这篇Django model 中设置联合约束和联合索引的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python从列表推导到zip()函数的5种技巧总结

在本文中,作者介绍了 5 种方法,也许在入门阶段时,我们还不太了解它们,但在实战中这 5 个技巧非常实用。 字符串运算 字符串本质上也是一种元组,但是字符串有很多「运算」方式。最直观的是...

python操作CouchDB的方法

本文简单讲述了python操作CouchDB的方法,分享给大家供大家参考。具体方法如下: 1.安装python couchDb库: https://pypi.python.org/pyp...

Django密码系统实现过程详解

一、Django密码存储和加密方式 #算法+迭代+盐+加密 <algorithm>$<iterations>$<salt>$<hash>...

Django实战之用户认证(用户登录与注销)

Django实战之用户认证(用户登录与注销)

上一篇中,我们已经打开了Django自带的用户认证模块,并配置了数据库连接,创建了相应的表,本篇我们将在Django自带的用户认证的基础上,实现自己个性化的用户登录和注销模块。 首先,我...

下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决

下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决

前言 最近在网上找了很多下载Crypto的方法,感觉作用都不算很大,然后自己瞎搞瞎搞就搞好了😅,所以打算分享出来。 直接pip下载或者Anaconda下载,Anacond...