day66日考
考题
今日考题
1.聚合查询,分组查询的关键字各是什么,各有什么特点或者注意事项
2.F与Q查询的功能,他们的导入语句是什么,针对Q有没有其他用法
3.列举常见的数据库字段及主要参数(越多越好)
4.orm数据库查询优化相关有哪些各有什么特点
1.聚合查询,分组查询的关键字各是什么,各有什么特点或者注意事项
聚合查询关键字aggregate;
分组查询annotate;
特点:
聚合函数aggregate()是QuerySet一个终止语句,它返回了包含一些键值对的字典,键的名称是聚合值的标识符(默认按照字段和聚合函数自动生成,也可以指定),值是计算出来的聚合值;
分组函数annotate(),数据库在严格模式之下,只能获取分组的依据,组内的其他字段无法获取。(ONLY_FULL_GROUP_BY)
2.F与Q查询的功能,他们的导入语句是什么,针对Q有没有其他用法
F查询:当查询条件是两个字段作比较的时候,就用到了F查询。
Q查询:当查询条件中包含“&”,“|”,“not”的时候,就用到了Q循环。
from django.db.models import F
models.Book.objects.filter(sell_out__gt=F('stock'))
注意:在操作字符串数据时候不能直接操作!
from django.db.models import Value
from django.db.models.functions import Concat
models.Book.objects.update(name=Concat(F('name'),Value('(新款666)')))
from django.db.models import Q
Q的高阶用法
q = Q() # 先生成一个Q空对象
q.connector = 'or' # 更改查询对象之间的关系,默认为and
q.children.append(('sell_out__gt',100)) # 添加查询条件
q.children.append(('price',800)) # 添加查询条件
models.Book.objects.filter(q) # filter内可以直接传q对象,默认还是and连接
3.列举常见的数据库字段及主要参数(越多越好)
# 主键
AutoField(primary_key=True)
# 字符串
CharField(max_length=32) varchar(32)
max_length 指定字段的长度,必须指定
verbose_name 字段的注释
# 整型
IntegerField() int
BigIntegerField() bigint
# 浮点型
DecimalField(max_digits=8,decimal_places=2)
max_digits 数字的最大长度
decimal_places 小数点后面的位数
# 邮箱
EmailField() 字符串varchar(254)
# 日期
DateField(Field) date
DateTimeField(Field) datetime
auto_now=True 每次修改会自动更新为当前时间
auto_now_add=True 只在数据创建的时候记录创建时间,后面不会发生变化
# 文件
FileField(Field)
upload to = '/data' 上传文件的路径
给该字段传递一个文件对象,会自动将文件保存到路径“/data”,并将保存的路径记录到数据库
# 布尔值
BooleanField(Field)
该字段传递布尔值 对应数据库中的0和1
如字段is_delete
# 文本类型
TextField(Field)
该字段可以用来存储大段的内容(文章,博客) 没有字数的限制
4.orm数据库查询优化相关有哪些各有什么特点
only和defer
select_related和prefetch_related
特点:
(1)only会将括号内对应的字段对应的值,封装到返回给你的对象中,点该字段不需要走数据库;点其它字段会频繁的走数据库查询;
(2)defer与only相反,会将除括号内字段之外的其它字段对应的值封装到返回给你的对象中,对象点其它属性不需要走数据库,点该字段会频繁的走数据库查询。
(3)select_related会自动帮你做联表操作(inner join),然后将连表之后的数据全部查询出来封装给对象;
(4)prefetch_related看似连表操作,其实是类似于子查询。
一对一 ,一对多 (多对多不支持)