Django框架之(之七-九)数据库查询和ORM

在这里插入图片描述

Django框架之(之七-九)数据库查询和ORM

一、查询操作

  • 查找是数据库操作中一个非常重要的技术。查询一般就是使用filter、exclude以及get三个方法来实现。
  • 查询条件
代码意义
exact使用精确的=进行查找
iexact使用like进行查找
contains大小写敏感,判断某个字段是否包含了某个数据
icontains大小写不敏感的匹配查询
in提取那些给定的field的值是否在给定的容器中

二、根据关联的表进行查询

categories = Category.object.filter(article__title__contains="xxxxx")

三、比较运算

代码意义
gt某个field的值要大于给定的值
gte类似于gt,是大于等于
lt类似于gt是小于
lte类似于lt,是小于等于
range判断某个field的值是否在给定的区间中
date针对某些date或者datetime类型的字段
year根据年份进行查找
time根据时间进行查找

在这里插入图片描述

四、聚合函数

4.1聚合函数的使用

代码意义
Avg求平均值
Count获取指定的对象的个数
Max和Min获取指定对象的最大值和最小值
Sum求指定对象的总和
  • avg
    在这里插入图片描述
  • count
    在这里插入图片描述
  • min和max
    在这里插入图片描述
  • sum
    在这里插入图片描述

4.2aggregate和annotate的区别

  • aggregate:返回使用聚合函数后的字段和值。
  • annotate:在原来模型字段的基础之上添加一个使用了聚合函数的字段,并且在使用聚合函数的时候,会使用当前这个模型的主键进行分组(group by)
    在这里插入图片描述

4.3F表达式和Q表达式

  • F表达式
    F表达式是用来优化ORM操作数据库的。
  • F表达式的应用场景
    1.避免竞争条件。当两个线程同时进行操作,在第一个线程正在操作还未保存的时候,第二个进程进行取值,修改保存。则第一个操作的值被覆盖丢失。但是由数据库操作的时候则不会出现此种情况。
    2.用于Queryset中的过滤。F()的实例作为查询中的模型字段的引用。可以用于两个不同字段比较
    3.支持加减乘除模幂操作,支持位操作。
    在这里插入图片描述
  • Q表达式
    在这里插入图片描述

五、QuerySet的方法

5.1QuerySet API

在这里插入图片描述

5.2QuerySet的方法

方法意义
filter将满足条件的数据提取出来,返回一个新的QuerySet
exclude排除满足条件的数据,返回一个新的QuerySet
annotate给QuerySet中的每个对象都添加一个使用查询表达式(聚合函数、F表达式、Q表达式、Func表达式等)的新字段
order_by指定将查询的结果根据某个字段进行排序
values用来指定在提取数据出来,需要提取哪些字段
values_list类似于values
all获取这个ORM模型的QuerySet对象
select_related在提取某个模型的数据的同时,也提前将相关联的数据提取出来
prefetch_related访问多个表中的数据的时候,减少查询的次数
create创建一条数据,并且保存到数据库中
get_or_create根据某个条件进行查找,如果找到了那么就返回这条数据,如果没有查找到,那么就创建一个
exists判断某个条件的数据是否存在
update执行更新操作,在SQL底层走的也是update命令
切片操作有时候我们查找数据,有可能只需要其中的一部分

六、ORM模型迁移

6.1 迁移命令

1.makemigrations:将模型生成迁移脚本。模型所在的app,必须放在settings.py中的INSTALLED_APPS中。

  • app_label:后面可以跟一个或者多个app,那么就只会针对这几个app生成迁移脚本。
  • --name:给这个迁移脚本指定一个名字。
  • --empty:生成一个空的迁移脚本。

2.migrate:将新生成的迁移脚本,映射到数据库中,创建新的表或者修改表的结构。

  • app_label:将某个app下的迁移脚本映射到数据库中。
  • app_label migrationname:将某个app下指定名字的migration文件映射到数据库中。
  • --fake:可以将指定的迁移脚本名字添加到数据库中。
  • --fake-initial:将第一次生成的迁移文件版本号记录在数据库中。

3.showmigrations查看某个app下的迁移文件

python manage.py showmigrations [app名字]

4.sqlmigrate:查看某个迁移文件在映射到数据库中的时候,转换的SQL语句

python manage.py sqlmigrate book 0001_initial

6.2根据已有的表自动生成模型

1.Django给我们提供了一个inspectdb的命令,可以非常方便的将已经存在的表,自动的生成模型。想要使用inspectdb自动将表生成模型。首先需要在settings.py中配置好数据库相关信息。不然就找不到数据库。

DATABASES = {
 'default': {
     'ENGINE': 'django.db.backends.mysql',
     'NAME': "migrations_demo",
     'HOST': '127.0.0.1',
     'PORT': '3306',
     'USER': 'root',
     'PASSWORD': 'root'
 }
}

2.修正模型:新生成的ORM模型有些地方可能不太适合使用。

class Article(models.Model):
    title = models.CharField(max_length=100, blank=True, null=True)
    content = models.TextField(blank=True, null=True)
    author = models.ForeignKey('front.User', models.SET_NULL, blank=True, null=True)
    tags = models.ManyToManyField("Tag",db_table='article_tag')

    class Meta:
        db_table = 'article'

3.执行命令python manage.py makemigrations生成初始化的迁移脚本,方便后面通过ORM来管理表。这时候还需要执行命令python manage.py migrate --fake-initial
4.将Django的核心表映射到数据库中:Django中还有一些核心的表也是需要创建的。不然有些功能是用不了的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值