Django的orm的高级操作

Django的orm的高级操作

查询语法大全:

  1. 比较运算符
# id > 3
res = models.UserInfo.objects.filter(id__gt=3)
# id >= 3
res = models.UserInfo.objects.filter(id__gte=3)
# id < 3
res = models.UserInfo.objects.filter(id__lt=3)
# id <= 3
res = models.UserInfo.objects.filter(id__lte=3)
# id != 3
res = models.UserInfo.objects.exclude(id=3)
# id = 2 and name = "zekai"
res = models.UserInfo.objects.filter(id=2,name="zekai")

# or
from django.db.models import Q
res = models.UserInfo.objects.filter(Q(id__gt=3|Q(name='zekai')))

2 . 身份运算符 in, not in

in
res = models.UserInfo.objects.filter(id__in=[2,3,4])

not in
res = models.UserInfo.objects.exclude(id__in=[2,3,4])

3 .between...and

res = models.UserInfo.objects.filter(id__range=[1,2,3,4])

4 .like

# 以'ze'开头
res = models.UserInfo.objects.filter(name__startswith='ze')

# g: 全局 global  i:忽略大小写 ignore    以ze开头,且忽略大小写
res = models.UserInfo.objects.filter(name__istartswith='ze')

# 以'ze'结尾
res = models.UserInfo.objects.filter(name__endswith='ze')

res = models.UserInfo.objects.filter(name__iendswith='ze')

# 包含ze的
res = models.UserInfo.objects.filter(name__contains='ze')
res = models.UserInfo.objects.filter(name__icontains='ze')

5 .count

res = models.UserInfo.objects.filter(id__gt=3).count()

6 .order by

# 数据以id升序
res = models.UserInfo.objects.all().order_by('id')

# 数据以id降序
res = models.UserInfo.objects.all().order_by('-id')

# 数据以id降序,id相同的话 以age升序
res = models.UserInfo.objects.all().order_by('-id','age')

7 . group by

 导入模块
from django.db.models import Avg, Sum, Max, Min, Count

#
res = models.UserInfo.objects.values("name").annotate(s=Sum('age'))

res = models.UserInfo.objects.values("name").annotate(s=Sum('age')).filter(s__gt=50)

8 .limit

# 从第10行开始取,取到20行
all()就是一个列表。因此[10:20]就是一个切片
res = models.UserInfo.objects.all()[10:20]
9. last
# 取最后一行数据
res = models.UserInfo.objects.last()

###### 10. only

# 仅取name这列数据,(id默认会被取进去)
res = models.UserInfo.objects.only('name')

###### 11. defer

# 排除name这列数据,其他列的数据都会取进去,(id默认会被取进去)
res = models.UserInfo.objects.defer('name')

###### 12. F(批量操作列的数据)

from django.db.models import F
# 对UserInfo表中age列的所有数据 加 1
res = models.UserInfo.objects.update(age=F('age')+1)

原生的SQL

1 .使用extra

'''
解释:结果集修改器,一种提供额外查询参数的机制
说明:依赖model模型
'''
用在where后:
    Book.objects.filter(publisher_id="1").extra(where=["title='python学习1'"])    

用在select后  
    Book.objects.filter(publisher_id="1").extra(select={"count":"select count(*) from hello_book"})

2 .使用raw方法

'''
解释:执行原始sql并返回模型
说明:依赖model多用于查询
'''
# 用法:
book = Book.objects.raw("select * from hello_book")
for item in book:
    print(item.title)

3 . 执行自定义SQL

'''
解释:利用游标执行
导入:from django.db import connection
说明:不依赖model
'''

# 用法:

from django.db import connection
cursor = connection.cursor()
#插入
cursor.execute("insert into hello_author(name) values('xiaol')")
#更新
cursor.execute("update hello_author set name='xiaol' where id=1")
#删除
cursor.execute("delete from hello_author where name='xiaol'")
#查询
cursor.execute("select * from hello_author")
#返回一行
raw = cursor.fetchone()
print(raw)
#返回所有
cursor.fetchall()

原文地址:https://www.cnblogs.com/bladecheng/p/11372335.html

时间: 2024-11-15 01:55:07

Django的orm的高级操作的相关文章

python——Django(ORM连表操作)

一对多 class UserType(models.Model): caption = models.CharField(max_length=32) class UserInfo(models.Model): user_type = models.ForeignKey(UserType)# user_type对象中封装id,caption username = models.CharField(max_length=32) age = models.IntegerField() 增: 1.外键

Django学习【第6篇】:Django之ORM单表操作(增删改查)

django之数据库表的单表查询 一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name ="海东",course="python",birth="2000-9-9",fenshu=80) Frank_obj.save() # 方式二: models.Student.objects.create(name ="海燕",co

Django学习【第7篇】:Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

django之跨表查询及添加记录 一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many). 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建多对多的关系:ManyToMany(&qu

Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many). 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建多对多的关系:ManyToMany("要绑定关系的表名"

Django之ORM跨表操作

一.准备数据库 models.py文件内容: from django.db import models # Create your models here. class Book(models.Model):     title=models.CharField(max_length=32)     price=models.DecimalField(max_digits=6,decimal_places=2)     create_time=models.DateField()     mem

Django之ORM操作

ORM基本增删改查操作: 1 # 增 2 models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs 3 obj = models.Tb1(c1='xx', c2='oo') 4 obj.save() 5 6 # 查 7 models.Tb1.objects.get(id=123) # 获取单条数据,不存在则报错(不建议) 8 models.Tb1.objects.all() # 获取全部 9 models.Tb1

Django models ORM基础操作--白话聊Django系列

上次我们讲完了views视图,那我们这次来看一下Django强大的ORM,可以这么说,你不懂Django的ORM,你就不懂Django,那废话不多说 ORM又称关系对象映射,在ORM里,一张表就是一个类,一行数据就是类的一个对象 在Django中遵循code first的原则,即:根据代码中定义的类来自动生成数据库表 利用ORM来实现定义表,以及对表进行操作 注意:在连接数据库上,Django默认是连接MySQLdb的,但是在python3中,不是很完美的支持这个模块,所以创建的Django项目

Django之ORM操作(***)

Django之ORM操作(***) 生成数据库: python manage.py makemigrations python manage.py migrate 常用命令: python manage.py runserver 0.0.0.0 python manage.py startapp appname python manage.py syncdb 创建superuser:python manage.py createsuperuser 在项目名中的__init__ .py 加: im

Django学习手册 - ORM 数据表操作

queryset 数据类型介绍 QuerySet与惰性机制 所谓惰性机制:表名.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它并不会马上执行sql,而是当调用QuerySet的时候才执行. QuerySet特点: <1>  可迭代的 <2>  可切片 <3>  惰性计算和缓存机制 例: info=models.table_name.objects.all()[0:5] #切片 info= models.table