Django模型层(附带test环境)
目录
- Django模型层(附带test环境)
- 开启测试环境
- 数据的增加
- 数据的删除
- 修改数据
- 查询数据
- 查询所有数据
- 去重查询
- 排序查询
- 统计
- 剔除指定数据
- 多表查询
- 校验数据是否存在
- 字段的筛选查询
开启测试环境
首先在app下找到tests.py
文件并进入
'MyDJ.settings'
要换成自己的项目名,我的是MyDJ
import os
from django.test import TestCase
if __name__ == '__main__':
# 导入一句话 : 来自于 manage.py 中的第一句话
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MyDJ.settings')
import django
import datetime
# 启动Django
django.setup()
from app01 import models
# 开始业务代码
user = models.user.objects.create(username='张三',password='222')
成功~
数据的增加
data = models.user.objects.create(username="李四",password=929)
data = models.user(username="陈五",password=909)
data.save()
数据的删除
data = models.user.objects.filter(username="张三").delete()
data = models.user.objects.get(id=9)
data.delete()
修改数据
data = models.user.objects.get(id=10)
data.password=111
data.save()
data = models.user.objects.filter(id=10).update(username="张三")
查询数据
data = models.user.objects.filter(id=3)
print(data.values())
# get不能查询不存在的数据,否则会报错
data = models.user.objects.get(id=1)
查询所有数据
# 查询所有数据
data = models.user.objects.values()
# id=1的所有字段
data = models.user.objects.filter(id=1).values()
# 元组查询,结果只有值没有键
data = models.user.objects.values_list()
data = models.user.objects.filter(id=1).values_list()
去重查询
# 相同的username字段不会被多次查询
data = models.user.objects.values('username').distinct()
print(data)
data = models.user.objects.values('username','password').distinct()
排序查询
# 从小到大
data = models.user.objects.order_by('id').values('id')
# 从大到小
data = models.user.objects.order_by('-id').values('id')
统计
# 统计库中所有数据
data = models.user.objects.values().count()
# 库中名为admin的数量
data = models.user.objects.filter(username="admin").count()
剔除指定数据
# 排除id=1的数据
data = models.user.objects.values().exclude(id=1)
多表查询
假设有user、user2两个模型
# 一对多
data = models.user.objects.select_related('user2').all()
# 多对多
users = User.objects.prefetch_related('user2').all()
校验数据是否存在
data = models.user.objects.filter(id=1).exists()
print(data) # True/False
字段的筛选查询
条件运算
- 大于
gt
data = models.user.objects.filter(id__gt=5)
- 小于
lt
data = models.user.objects.filter(id__lt=5)
- 大于等于
gte
data = models.user.objects.filter(id__gte=5)
- 小于等于
lte
data = models.user.objects.filter(id__lte=5)
- 或
in
data = models.user.objects.filter(id__in=[1, 2, 3])
- 两个条件之间
range
# 顾头顾尾 因此返回id=1,2,3的数据
data = models.user.objects.filter(id__range=[1,3]).values()
- 模糊查询
contains
(默认区分大小写)
data = models.user.objects.filter(username__contains='三').values()
- 模糊查询取消大小写限制
icontains
data = models.user.objects.filter(username__icontains='三').values()
- 以指定字符开头/结尾
startswith
/endswitch
data = models.user.objects.filter(username__startswith='张').values()
- 过滤指定时间区间
time
# 过滤时间小于当前时间的数据
current_time = datetime.datetime.now()
data = models.user.objects.filter(up_time__lt=current_time).values()