Django如何自定义model创建数据库索引的顺序


Posted in Python onJune 20, 2019

首先这是一个先有鸡还是先有蛋的问题,大部分时候数据都来自excel的整理,当数据越来越多,需要分析的点也越来越多的时候,通过excel来管理显然有些吃力了。

这时候就需要将excel导入到数据库中,然而model创建的索引并非是我们编写时候的顺序,特别是当存在 models.ForeignKey 时,我们必须要先创建 ForeignKey的class,最后再创建总表。

为了保证数据库的索引跟excel的索引一致,我们需要对model中的索引字段做一系列的处理(可能这是一个野路子)。

首先当然是先创建好ForeignKey,这部分class要写在前面,否则总表的class对于引用的ForeignKey会提示未定义(这部分不做举例)。

接下来创建总表,此时不要着急去填写总表中的索引字段,只先创建这个总表的表头,如下图:

@python_2_unicode_compatible
class ZZ_Demo(models.Model): #此处的ZZ开头的命名是为了让这个class在最后创建
######中间什么都不要写######
 class Meta:
 verbose_name = '这是个Demo'
 verbose_name_plural = '这是个Demo' #这些是在Django admin里显示的 可忽略

 def __str__(self):
 return self.name

然后在终端执行:

python manage.py makemigrations
python manage.py migrate

这个过程会看到系统在创建数据表。

创建好以后再添加总表中的索引字段,首先可以肯定的是model是按照字母顺序创建索引的,如果没有其他的models.ForeignKey,可以直接通过字母顺序来控制索引的创建顺序,如下图所示:

@python_2_unicode_compatible
class ZZ_Demo(models.Model):
 ab_productline = models.ForeignKey(ProductLine, verbose_name=u'产品线',default=1,null=True)
 ac_name = models.CharField(max_length=50, verbose_name = u'故障名称',null=True)
 ......
 bn_casetags = models.CharField(max_length=50, verbose_name = u'关键词 标签 备注',default=None,blank=True,null=True)

 class Meta:
 verbose_name = '这是个Demo'
 verbose_name_plural = '这是个Demo'

 def __str__(self):
 return self.be_casenumber

这样创建好的索引就完全是字母顺序排列了,小伙伴们可以试试看。

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

在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% 直接得到一万条数据

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
从零学python系列之教你如何根据图片生成字符画
May 23 Python
python执行get提交的方法
Apr 29 Python
Python的Django框架可适配的各种数据库介绍
Jul 15 Python
python daemon守护进程实现
Aug 27 Python
Python基础知识_浅谈用户交互
May 31 Python
Python3简单实现串口通信的方法
Jun 12 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
解决pycharm安装第三方库失败的问题
May 09 Python
pytorch快速搭建神经网络_Sequential操作
Jun 17 Python
Python drop方法删除列之inplace参数实例
Jun 27 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
Jan 05 Python
K近邻法(KNN)相关知识总结以及如何用python实现
Jan 28 Python
pyqt 多窗口之间的相互调用方法
Jun 19 #Python
pyqt5 实现多窗口跳转的方法
Jun 19 #Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
Jun 19 #Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 #Python
pyqt5使用按钮进行界面的跳转方法
Jun 19 #Python
Python发展史及网络爬虫
Jun 19 #Python
Python QQBot库的QQ聊天机器人
Jun 19 #Python
You might like
php 学习资料零碎东西
2010/12/04 PHP
PHP中构造函数和析构函数解析
2014/10/10 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
2016/10/14 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
解析JavaScript中点号“.”的多义性
2013/12/02 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
2019/06/28 Javascript
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
详解python polyscope库的安装和例程
2020/11/13 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
精通CAD能手自荐书
2014/01/31 职场文书
物控部经理职务说明书
2014/02/25 职场文书
大学新闻系自荐书
2014/05/31 职场文书
三孔导游词
2015/02/05 职场文书
2015年五四青年节活动总结
2015/02/10 职场文书
如何使用vue3打造一个物料库
2021/05/08 Vue.js
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers