Django教程

创建项目

# 创建项目
django-admin startproject [projectName]
# 创建模块
python manage.py startapp [moduleName]

对于Mysql数据库:需要安装pymysql这个第三方库

安装命令:pip3 install mysqlclient

数据库配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'blog',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '172.0.0.1',
        'PORT': 3306
    }
}

模型

5.2 数据查询

要从数据库检索数据, 首先要获取一个查询集(Query Set) , 查询集表示从数据库获取的对象集合,它可以有零个,一个或多个过滤器。返回查询集的方法,称为过滤器, 过滤器根据给定的参数缩小查询结果范围, 相当于sql语句中where或limit。

  • 在管理器上调用过滤器方法会返回查询集
  • 查询集经过过滤器筛选后返回新的查询集,因此可以写成链式过滤
  • 惰性执行; 创建查询集不会带来任何数据库的访问,直到调用数据时,才会访 问数据库 。
  • 以下对查询集求值:迭代、切片、序列化、与if合用 repr() /print(/len() /list() /boo()
管理器的方法 返回类型 说明
模型类.objects.all() Query Set 返回表中所有数据
模型类.objects.filter() Query Set 返回符合条件的数据
模型类.objects.exclude() Query Set 返回不符合条件的数据
模型类.objects.order_by() Query Set 对查询结果集进行排序
模型类.objects.values() Query Set 返回一个Query set, 其中每个对象为一个
模型类.objects.values_list() Query Set 和values() 基本相同, 但每个对象是一个元
模型类.objects.reverse() Query Set 对排序的结果反转
模型类.objects.only(字段) Query Set 只显示指定字段
类.objects.defer(字段) Query Set 去除指定字段
模型类.objects.get() 模型对象 + 返回一个满足条件的对象; 如果没有找到符合条件的对象,会引发模型类.Does Not Exist异常 + 如果找到多个,会引发模型 类.Multi Objects Returned异常
模型类.objects.first() 模型对象 返回第一条数据
模型类.objects.last() 模型对象 返回最后一条数据
模型类.objects.earliest () 模型对象 根据指定字段返回最早增加的记录
模型类.objects.latest(field) 模型对象 根据field字段返回最近增加记录
模型类.objects.exists() bool 判断查询的数据是否存在
模型类.objects.count() int 返回查询集中对象的数目
  • all()
# 获取所有数据 
对应SQL:select * from User
users= User.objects.all()
  • filter(**kwargs) 返回QuerySet包含与给定查找参数匹配的新查询集。
等价于:select * from User
User.objects.filter()

对应SQL:select * from User where username='admin'
User.objects.filter(username='admin')

对应SQL:select * from User where id >1 and type=2
User.objects.fileter(id__gt=1, type=2)

对应SQL:select * from User where id >1 and type = 2
User.objects.filter(id_gt=1).filter(type=2)
  • exclude(**kwargs)
对应SQL:select * from User where username != 2
User.objects.exclude(username='admin')
  • order_by(*fields)
    参数是字段名、可以有多个字段名,默认是升序
    如果要按某个字段降序。在字段名前面加"-": "id"表示按id降序排列
按照id升序排列 对应SQL:select * from User order by id
User.objects.order_by('id')

按照id降序排列 对应SQL:select * from User order by id desc
User.objects.order_by('-id')

按照username升序排列 按照id降序排列 对应SQL: select *from User order by username, id desc
User.objects.order_by('username', '-id')
  • values()
返回所有字段 对应SQL: select * from User
User.objects.values()

返回所有数据的username 和 password 字段 对应SQL: select username, password from User
User.objects.values('username', 'password')
  • reverse()
    对排序的结果反转
对应SQL: select * from User order by id desc
User.objects.order_by('id').reverse()
对应SQL: select * from User order by id
User.objects.order_by('-id').reverse()
  • distinct() 去重
对应SQL: select DISTINCT username from User
User.objects.values('username').distinct()

5.2.5统计查询

需要先导入模块:

from django.db.models import Max, Min, Sum, Avg, Count 
  • 聚合查询:对多行查询结果的一列进行操作
#统计记录总数: select count(*) from user 
User.objects.aggregate(Count('uid') )           #{'uid_count':4} 
User.objects.aggregate(Max('uid') )             #{'uid max':5} 
User.objects.aggregate(Min('uid') )             #{'uid min':2} 
  • 分组统计
# 等价sql:
select type, count(*) from usergroup by type
res=User.objects.values('type') .annotate(Count('uid') ) 
# 统计结果:
[{"type": :' 普通用户', 'uid count':3} ,{'type':'超级管理员', 'uid count':1} ]

# 查看生成的sql语句 
print(res.query) 


#  此语法忘了没搞明白
SELECT`user`.`type`, COUNT(`user`.uid`) )AS ; `uid d count t` FROM `user` GROUP BY `user`.`type`ORDER BY NULL

5.2.6 Q对象和F对象

需要先导入模块:

from django.db.models import Q,F
  • Q对象可以对关键字参数进行封装, 从而更好的应用多个查询, 可以组合&(and) 、I(or) 、~(not) 操作符。
#原生sql:
select * from user where uid=2 or uid= 3  
User.objects.filter(Q(uid=2) | Q(uid=3) ) 
User.objects.filter(Q(uid gte=2) &Q(uidl te=3) )  
User.objects.filter(~Q(uid gte=2) ) 
  • F对象:用于比较表中两个字段
#等价sql:
select * from user where uid<type 
User.objects.filter(uidl te=F('type') )
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 聚合查询 聚合查询是指对一个数据表中的一个字段的数据进行部分或全部进行统计查询,查bookstore_book数据...
    南坡三舅阅读 2,806评论 0 0
  • 静态文件 什么是静态文件不能与服务器端做动态交互的文件都是静态文件如:图片,css,js,音频,视频,html文件...
    南坡三舅阅读 4,149评论 0 0
  • 数据库的操作(CRUD操作) CRUD是指在做计算处理时的增加(Create)、读取查询(Read)、更新(Upd...
    南坡三舅阅读 3,843评论 0 1
  • 我们继续教程1的部分开始。我们将要建立数据库,创建你的第一个模型,并且快速简介django的自动生成后台管理系统。...
    转身丶即天涯阅读 4,130评论 0 8
  • Django教程--model教程 经过前面几节,我们已经简单的了解了在Django中如何进行模板渲染、参数和文件...
    iffly阅读 4,554评论 0 3