Django的模型层的相关操作

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 对数据的不同字段进行比较 比较更新 对数据进行加减操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值