• django--->自定义表名,建立索引


    1. 自定义表名与字段名称

    1.1 介绍

    1. 在我们创建一个模型时,Django的ORM会根据应用名(app name), 模型名(model name)和字段名(field name)自动在数据库中创建数据表。

    2. 比如我们有一个Blog的应用,里面有Article模型, 其中Article模型有title这个字段,那么

    3. Django默认会创建一个名为blog_article的数据表,

    其中有title这个字段。假如我们希望把表名改为article,标题改为article_title,以便与已经存在的数据表或字段建立映射关系,我们可以按如下代码操作。

    1.2 代码示例

    1. class Article(models.Model):
    2. """文章模型"""
    3. # 通过db_column自定义数据表中字段名
    4. title = models.CharField('标题', max_length=200, db_column='article_title')
    5. slug = models.SlugField('slug', max_length=60, blank=True)
    6. def __str__(self):
    7. return self.title
    8. class Meta:
    9. db_table = 'article' # 通过db_table自定义数据表名

    2. 建立索引

    2.1 介绍

    1. 使用索引可快速访问数据库表中的特定信息。

    2. 数据库索引好比是一本书前面的目录,没有索引目录的话,你访问书中某个页面需要从第一页遍历到最后一页,如果有目录,你可以快速地根据目录查找到所需要的页面。

    3. Django项目中如果你需要频繁地对数据表中的某些字段(如title)使用filter(), exclude()和order_by()方法进行查询,我们强烈建议你对这些字段建议索引(index), 提升查询效率。

    2.2 建立索引

    要对模型中的某个字段建立数据库索引,你可以使用db_index选项,也可以使用Meta选项建立索引。使用Meta选项的好处是你可以一次性对多个字段建立索引,还可以对多个字段建立组合索引。

    2.2.1 第一种方式 使用db_index选项

    1. class Article(models.Model):
    2. """文章模型"""
    3. # 使用db_index=True对title建立索引
    4. title = models.CharField('标题', max_length=200, db_index=True)

    2.2.2 第二种方式 使用Meta选项(推荐)

    1. class Article(models.Model):
    2. """文章模型"""
    3. title = models.CharField('标题', max_length=200,)
    4. class Meta:
    5. indexes = [
    6. models.Index(fields=['title']),
    7. ]

    3. 建立联合索引,联合唯一(unique_together django即将弃用)

    3.1 介绍

    联合索引的优势
    ​ 示例SQL:select * from person where a=100 and b=100 and c=1000;

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

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

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

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

    3.2 代码

    1. class Cart(models.Model):
    2. user = models.ForeignKey(
    3. MyUser,
    4. verbose_name="用户"
    5. )
    6. goods = models.ForeignKey(
    7. Goods,
    8. verbose_name="商品"
    9. )
    10. num = models.IntegerField(
    11. verbose_name="商品数量"
    12. )
    13. is_select = models.BooleanField(
    14. default=True,
    15. verbose_name="选中状态"
    16. )
    17. class Meta:
    18. # 联合约束 其中goods和user不能重复
    19. unique_together = ["goods", "user"]
    20. # 联合索引
    21. index_together = ["user", "goods"]
    22. # unique_together = ["goods", "user"] 表示联合约束,其中"goods"和"user"表示不能重复,不能一样。
    23. # index_together = ["user", "goods"] 表示联合索引,其中"goods"和"user"联合同步查询,提高效率。

    4. 建立联合索引,联合唯一(UniqueConstraint,django2.2以上推荐)

    案例

    1. from django.db import models
    2. class Text_one(models.Model):
    3. title = models.CharField(max_length=225)
    4. name = models.CharField(max_length=225, db_index=True)
    5. count = models.IntegerField(default=100)
    6. class Meta:
    7. constraints = [
    8. # 联合唯一
    9. models.UniqueConstraint(fields=['name', 'title'], name='unique_name')
    10. ]

    参考文章

    (9条消息) Django 索引与联合索引_像风一样爱自由的博客-CSDN博客_django 组合索引

     Django基础(22): 数据库的设计之自定义表名,建立索引和使用多数据库主从配置 (qq.com)

  • 相关阅读:
    MySQL 经典面试题分析(值得收藏)
    MIPS指令和汇编语言有什么关系
    无线信道划分
    人机组队概念的战场应用
    Ubuntu22.04 安装配置流水账
    gee引擎修改UI界面图文教程
    并查集(数据结构)
    计算机竞赛 深度学习卫星遥感图像检测与识别 -opencv python 目标检测
    第五章 I/O管理 五、输入/输出应用程序接口&设备驱动程序接口
    ORA-32771 cannot add file to bigfile tablespace
  • 原文地址:https://blog.csdn.net/qq_52385631/article/details/126715062