首页 > 编程语言 >进入python的世界_day55_Django—ORM进阶操作、ORM事务、Ajax

进入python的世界_day55_Django—ORM进阶操作、ORM事务、Ajax

时间:2022-12-19 21:33:22浏览次数:51  
标签:obj 进阶 python res related 查询 ORM max

一、ORM进阶操作

1.Q查询进阶

  • Q查询还可以将查询的字段改为字符串形式
q_obj = Q()
q_obj.connector='or'  #q对象默认是多个条件 也是and关系 可以修改为or
q_obj.children.append(('pk',1))
q_obj.children.append(('pin;ish_id',3)) # 不停的给这个Q对象塞条件
res = models.Book.objects.filter(q_obj) # 按完成的Q对象筛选
print(res)

2.ORM查询优化

  • django中 orm默认都是惰性查询,orm语句的代码只有后续使用到才会去执行
  • django orm自带limit分页,为了减轻数据库压力

3.ORM查询优化之only与defer

  • only:

    用only 查询返回数据对象 封装了括号里选择的字段,当查封好的字段时,不需要再执行SQL,不过这个对象 也支持括号里没有的字段名 只是它会去数据库里面查这个值(要再走一次SQL)

  • defer

    defer相反 数据对象点击括号内封好的字段, 每次都会走SQL查询,而查括号内没有的字段不会走数据库查询

res = models.Book.objects.only('title','price')
for obj in res:
     print(obj.title)
     print(obj.price)
     print(obj.publish_time)
  • select_related

​ select_related底层是inner join连表, 括号内只能接收外键字段(一对多 一对一)自动连表 得出的数据对象在点击表中数据的时候不会再走数据库查询

res = models.Book.objects.select_related('publish')
for obj in res:
	print(obj.name)
  • prefetch_related

​ prefetch_related底层其实是子查询,将查询之后的结果也一次性封装到数据对象中 用户在使用的时候是感觉不出来的

res = models.Book.objects.prefetch_related('publish')
for obj in res:
    print(obj.publish.name)

二、事务操作

django orm提供了至少三种开启事务的方式
	方式1:配置文件数据库相关添加键值对		全局有效
       "ATOMIC_REQUESTS": True每次请求所涉及到的orm操作同属于一个事务
	方式2:装饰器							局部有效
       from django.db import transaction
       @transaction.atomic
       def index():pass	
 	方式3:with上下文管理					局部有效
       from django.db import transaction
    	def reg():
    		with transaction.atomic():
             pass

三、模型层常见字段

AutoField() # int自增列
CharField()  # 字符类型
IntegorField() # 一个整数类型
BigIntegerField()  #长数型(有符号)
DateField()  # 日期字段
DateTimeField()  #日期时间端
DecimalField()   #十进制 小数
EmailField()  # 字符串类型,提供验证机制
BooleanField()  # 传布尔值存数字0或1
TextField()  # 存储大段文本
FileField()  # 存储文件数据  自动找指定位置存储 字段存具体路径

class MyCharField(models.Field):
    def __init__(self, max_length, *args, **kwargs):
        self.max_length = max_length
        super().__init__(max_length=max_length, *args, **kwargs)

    def db_type(self, connection):
        return 'char(%s)' % self.max_length

四、常见字段参数

max_length  #最大 长度

verboses_name  # 备注

auto_now  # 配置上auto_now=True,每次更新数据记录的时候会更新该字段。
auto_now_add  # 配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。

null  #表示某个字段可以为空

default  #为该字段设置默认值

max_digits # 总位数

unique=True #该字段在此表中必须是唯一的

db_index=True  #代表着为此字段设置索引

choices  #当字段数据的可能性是可以完全列举出来的时候 应该考虑使用该参数  性别、学历、成绩  

关键字参数

to  # 设置要关联的表
to_field  # 设置要关联的字段
related_name  # 起别名
on_delete  # 当删除关联表中的数据时,当前表与其关联的行的行为。(参考上面的例子)

五、Ajax

​ 大佬封装的,我们只要学会使用即可

​ 异步提交 局部刷新

​ 与form表单区别 :可以自动复制一份给后端校验

1.基础语法

$.ajax({
    url:'', 控制数据的提交地址
    type:'', 控制请求方式 (默认get请求)
    data:{}, 组织提交的数据
    success:function(形参){
    	异步回调函数
}
})

2.数据编码格式

Content-Type
格式一:urlencoded
数据格式: name=jason&pwd=123&hobby=read
django后端统一处理到request.POST
_______________________________________
格式二:formdata
数据格式:无法查阅
django后端自动将文件数据处理到request.FILES普通数据request.POST
———————————————————————————————————————
格式三:application/json
数据格式:json格式
django后端不会处理 在request.boby中存储(bytesl类型)自己处理
语法注意事项

3.ajax携带文件数据

$('#d3').click(function(){
    1.产生内置对象
    let formData = new FormData();
    2.添加普通数据
    formData。append('username',$('#d1').val())
    3.添加文件数据
    formDate.append('file',$)
    4.发送ajax请求
    $.ajax({
        url:'',
        type:'post',
        data:formData,
        contentType:false,  // 不适用任何编码
        processDate:false,  // 不处理数据格式
        success:function(args){
            
        }
    })
})

标签:obj,进阶,python,res,related,查询,ORM,max
From: https://www.cnblogs.com/wznn125ml/p/16993118.html

相关文章

  • ORM查询优化、ORM字段类型及参数、ORM事务操作
    ORM查询优化(重点)ORM事务操作ORM常用字段类型ORM常用字段参数ORM三种创建多对多的方式ORM查询优化(重点)1.ORM查询默认都是惰性查询'''获取的是数据......
  • django 08 orm查询相关3
    Q查询进阶importosdefmain():os.environ.setdefault('DJANGO_SETTINGS_MODULE','djangoday07.settings')importdjangodjango.setup()fromapp......
  • Q查询进阶操作、 ORM查询优化 、ORM事务操作、 ORM常用字段类型、 ORM常用字段参数 、
    目录Q查询进阶操作ORM查询优化ORM事务操作ORM常用字段类型ORM常用字段参数AjaxContent-Typeajax携带文件数据Q查询进阶操作fromdjango.db.modelsimportQq_obj=Q()......
  • Python 1~300的奇数,7的倍数不要
    第一种方法i=1j=0whilei<=300:ifi%2!=0:ifi%7==0:i+=1continuej+=ii+=1print(j)先打出,检验输出300......
  • django ORM查询优化,事务,ajax
    ORM查询优化,事务,ajax内容概要Q查询进阶操作ORM查询优化ORM事务操作ORM常用字段类型ORM常用字段参数ORM三种创建多对多的方式Ajax请求内容详细Q查询进阶操作,默......
  • ORM的一些尾巴和Ajax的基础
    今日内容详细Q查询进阶操作使用Q查询记得先导入fromdjango.db.modelsimportQ#1.先产生Q对象q_obj=Q()#2.默认多个条件的连接条件是and可以修改为orq_obj.c......
  • 极简Python语法(4)
    9、面向对象程序设计9.1面向对象概述一种设计思想。是指客观世界中存在的对象,具有唯一性。也可以是抽象的一个事物,具有自己的属性和行为。面向对象技术是一种从组织结构上......
  • Python语法糖之解包运算符
    目录解包运算符*和**一个尴尬的场景可选解决方法可迭代对象解包(*运算符)例子字典解包(**运算符)本博客主要参考为北京大学陈斌老师的下一站Python解包运算符*和**......
  • 全面理解主成分分析(PCA)和MNIST数据集的Python降维实现
    注:本博文为原创博文,如需转载请注明原创链接!!!  这篇博文主要讲述主成分分析的原理并用该方法来实现​​MNIST​​数据集的降维。一、引言  主成分分析是一种降维和主成分......
  • Windows下Python虚拟环境搭建
    pip安装第三方模块virtualenvwrapper-winpipinstallvirtualenvwrapper-win-ihttps://pypi.douban.com/simple/虚拟环境默认创建位置(%USERPROFILE%\Envs)如需修改,......