Django教程

2021-07-14  本文已影响0人  WangLizhi

创建项目

# 创建项目
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。

管理器的方法 返回类型 说明
模型类.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 返回查询集中对象的数目
# 获取所有数据 
对应SQL:select * from User
users= User.objects.all()
等价于: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)
对应SQL:select * from User where username != 2
User.objects.exclude(username='admin')
按照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')
返回所有字段 对应SQL: select * from User
User.objects.values()

返回所有数据的username 和 password 字段 对应SQL: select username, password from User
User.objects.values('username', 'password')
对应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()
对应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
#原生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) ) 
#等价sql:
select * from user where uid<type 
User.objects.filter(uidl te=F('type') )
上一篇 下一篇

猜你喜欢

热点阅读