1.模型层 makemigrations migrate的区别
make migrations 生成迁移文件
migrate 执行迁移文件
2.Django models模型类继承的方式
1.用父类model来保存在子类模板中的重复数据信息,父类models是不单独生成
也不会单独使用的数据表格,这种情况下使用抽象基类继承 Abstract base classes 父类继承
2.从现有的model继承并让每个model都有自己的数据表,使用多重表格继承 也就是说自定义继承
3.只是在models中python级别的行为,而不涉及字段的改变。
代理model proxy适合这种场合
3.class Meta 元信息字段有哪些
1.Model类可以通过元信息类设置索引和排序信息
2.元信息是定义在model模板中的一个Meta子类
自定义表格名称 db_table
联合索引 index_together
联合唯一索引 unique_together
admin管理员平台显示的表名称
verbose_name/verbose_name_plural排序字段ordering
抽象基类 abstract
4.Django中模型类的数据关系结构 数据表数据库
一对一 OneToOneField
一对多 OneToManyField ForeignKey
多对多 ManyToManyField
5.外键的用法 , 什么时候适合使用外键,外键一定需要索引吗
1.程序很难保证数据的完整性,如果说服务器宕机或者程序出现异常,这个时候的外键引用就可以保证数据的完整性和一致性
2.性能要求不高,安全要求高则使用外键,保证安全的前提下
性能要求高,安全性能不高则不适用外键,因为会延迟查询速度
3.外键索引能够加快关联表查询的速度
Primary Key 和 Unique Key的区别
主键和唯一键都是唯一性约束
主键是自增的 一张表格中只能有一个主键字段
唯一键是可以设置多个字段的唯一字段
主键必须不能为空 唯一键可以为空
DateTime的auto_now 和 auto_now_add的区别
auto_now 记录更新时间 如果说是true,那就会强制自动更新为现在的更新时间,
也就是每次更新修改数据库的时候,会直接强制更新数据库时间
auto_now_add 记录创建时间 设置为true的时候,会设置为第一次创建表格的时间以后修改的时候不会进行更改
当你删除外键的时候,关联表的处理方式
6.foreign key 有六种处理方式
1.同时删除父表和子表 CASCADE 级联删除
2.防止删除父表 Project 弹出ProjectedError
3.设置子表为空 SET_NULL
4.设置子表为默认值 SET_DEFAULT
5.设置子表什么都不做 DO_NOTHING
6.设置为一个传递给set()的值或者回调函数的返回值 SET()
7.GenericForeignKey 和 GenericRelation的区别
这两个都是为了解决创建多表产生的多外键冗余数据,通过ContentType
来实现数据的一对多能够与任何模型连接起来,保证代码的干净。
避免创建大量无用空间数据,有效减少存储空间和服务器压力
8.Django中如何写原生SQL
extra
raw
游标 cursor
9.谈谈你对ORM的理解
ORM对象关系映射 Object Relationship Mapping
ORM是基于MTV或者MVC设计模式的一个重要部分,实现了数据库和数据模型的解耦。
数据模型的设计不再依赖特定的数据库,通过简单配置可以更换数据库。
极大地减轻了开发人员的工作量,不需要因为数据库的变更做无效的劳动
如何使用Django ORM批量创建数据
可以使用
django.db.models.query.QuerySet.bulk_create()批量创建对象,减少SQL查询次数。
10.列举Django ORM操作中的Query_Set的对象得方法 查询
all 查询所有结果
filter 将查询集中的数据按照某个条件进行过滤
get 返回寓所筛选条件相符合的对象,有且只有一个
exclude 排除满足条件的对象
order_by将查询集中的数据进行排序
reverse将查询集颠倒顺序
count 返回查询集中某个对象出现的次数
first 返回第一条记录
last 返回最后一条记录
exists 判断QuerySet中是否包含数据包含返回true 否则返回false
values 返回包含对象的具体值得字典的QuerySet
values_list 返回的是元组
distinct 对查询集去重
11.ORM如何取消级联
null=True 在父表被删除,null为True的情况下就会取消级联操作
models.ForeignKey(User,blank=True,null=True,on_delete=models.SET_NULL)
12.查询集的两大特征 Query_set 什么是惰性执行
惰性执行和缓存
惰性查询是创建了查询集不会调用数据库也不会访问数据库,
直到调用数据时,才会访问数据库
13.查询集返回的列表过滤器有哪些
all 返回所有数据 filter返回满足条件的数据 exclude返回出满足条件的数据 order_by 对数据进行排序
数据集的创建不会涉及到数据库,因此可以级联操作 ,在访问数据的时候才会对数据库进行请求,
多频次复杂的数据库查询往往是性能的根本问题,涉及到外键按照默认方式取值这样会导致多次数据库查询性能降低
在查询对象集的时候,把置顶的外键对象也指定全部加载防止后续的重复查询,使用select_related prefetch_related
就可以提高查询速度提升性能减少数据库的查询次数
14.select_related 和 prefetch_related 的区别
select_related是一对一和外键
prefetch_related是一对多和多对多字段查询
15.values和values_list的区别
values 是读取字典中的QuerySet
values_list是读取元组中的QuerySet
16.dict和QueryDict的区别
dict一个键对应一个值 key ---- values 如果说出现了多个值就会发生冲突,只是保留最后一个值
QueryDict 查询字典集 一个键对应多个值 比如多选框
request.GET和request.POST的QueryDict在一个正常的请求响应中是不可变的,
如果想要获得可变的版本就要用copy
dict 键值对 一对一 如果说一个键对应多个值就会发生冲突,保留最后一个值
queryDict 一个键对应多个值 类似字典的自定义类,用来处理单键对应多值的情况
17.Django中的查询Q和F的区别
Q 对数据的多个字段进行查询 且或非 &|~联合使用
F 对数据的不同字段进行比较 比较更新 对数据进行加减操作