1.model.py创建学生类student
from datetime import datetime
from django.db import models
class Student(models.Model):
# def __init__(self, name, age=None, sex=None):
# super().__init__()
# self.s_name=name
# self.s_age=age if age else self.s_age
# self.s_sex=sex if sex else self.s_sex
# # 创建时间
# self.creat_time=datetime.now()
# self.operate_time=datetime.now()
#自增字段
# s_id=models.AutoField()
#字符串
s_name=models.CharField(max_length=10,unique=True,verbose_name='姓名')
# int类型
s_age=models.IntegerField(default=16,verbose_name='年龄')
#布尔类型
s_sex=models.BooleanField(default=1,verbose_name='性别')
#创建时间,用于第一次时间的创建
creat_time=models.DateTimeField(auto_now_add=True,verbose_name='创建时间')
#修改时间
operate_time=models.DateTimeField(auto_now=True,verbose_name='修改时间')
#小数,精确整数和小数位数
#EmailField()
# 图片
# ImageField
# 在数据库中改变字段名字
# db_column
#s_name=models.CharField(db_column=''xxx',max_length=10,unique=True,verbose_name='姓名')
class Meta:
db_table='student'
2.对数据进行处理
1)增加学生
方法1:
Student.objects.create()
方法二:
stu=Student()
stu.s_name='xxx'
stu.save()
方法三:
stu=Student(x1,x2,...)
stu.save()
2)查询学生
- all :查询所有数据
- filter:获取的结果为queryset(查询集),结果可以返回空,一个或多个对象
- get() 获取的结果为object(单个)对象,如果没有满足条件的对象获取会报错,获取的对象超过一个也会报错
- 注意:get()能不用就不用,最后就不要用
- exclude :不包含 获取不包含该对象以外的所有对象
- order_by :排序 +:升序 -:降序
- values-->获取单个字段
- first:获取queryset(查询集)中的第一个对象
- last:获取queryset(查询集)中的最后一个对象
- 切片--->前面那个下标要考虑取值范围,后面那个不用
- 模糊查询:contains==>'%x%' startswith==>'x%' endswith==>'%x'
- isnull/isnotnull 判断是否为空/是否不为空
- in 判断在范围之内
- pk:与id功能相同
- 比较运算:gt(大于) gte(大于等于) lt(小于) lte(小于等于)
- 逻辑运算:Q(条件) | Q(条件) 逻辑或 ;Q(条件) & Q(条件) 逻辑与 ;~Q(条件) 逻辑非
3)修改学生
方法一:
stu=Student.objects.get(条件)
stu.字段=修改值
stu.save()
方法二:
Student.objects.filter(条件).update(修改字段=修改值)
4)删除学生
stu=Student.objects.get(条件)
stu = Student.objects.filter(条件).first()
stu.delete()
from django.db.models import Q
from django.http import HttpResponse
from django.shortcuts import render
from app.models import Student
def create_stu(request):
# 创建学生信息
# 引入ORM概念:对象关系映射 insert into student value()
# 第一种
# Student.objects.create(s_name='小王')
# 第二种
# stu=Student()
# stu.s_name='小坑'
# stu.save()
# 第三种(尽量少用,问题很多)
# stu=Student('小菜',20,0)
# stu.save()
return HttpResponse('创建学生方法')
def select_stu(request):
'''
查询数据
all :查询所有数据
filter:获取的结果为queryset(查询集),结果可以返回空,一个或多个对象
get() 获取的结果为object(单个)对象,如果没有满足条件的对象获取会报错,获取的对象超过一个也会报错
注意:get()能不用就不用,最后就不要用
exclude :不包含 获取不包含该对象以外的所有对象
order_by :排序 +:升序 -:降序
values-->获取单个字段
first:获取queryset(查询集)中的第一个对象
last:获取queryset(查询集)中的最后一个对象
切片--->前面那个下标要考虑取值范围,后面那个不用
模糊查询:contains==>'%x%' startswith==>'x%' endswith==>'%x'
isnull/isnotnull 判断是否为空/是否不为空
in 判断在范围之内
pk:与id功能相同
比较运算:gt(大于) gte(大于等于) lt(小于) lte(小于等于)
逻辑运算:Q(条件) | Q(条件) 逻辑或 ;Q(条件) & Q(条件) 逻辑与 ;~Q(条件) 逻辑非
'''
# all :所有
# select * from student;
# stus=Student.objects.all()
# filter:获取的结果为queryset,可以返回空,一条或多条
# select * from student where s_name='小李'
# stus=Student.objects.filter(s_name='小李')
# 查询年龄等于16,年龄不存在时,结果空
# stus=Student.objects.filter(s_age=16)
# get() 获取的结果为object对象,获取不成功会报错,结果超过一条也会报错
# 获取年龄等于20的学生,获取对象时,如果满足的对象超过一个会报错
# stus=Student.objects.get(s_age=18)
# stus=Student.objects.get(id=100)
# 查询多条
# stus=Student.objects.filter(s_age=16).filter(s_name='小李')
# stus=Student.objects.filter(s_age=16,s_name='小李')
# exclude :不包含
# 查询姓名不等于小红的学生信息
# stus=Student.objects.exclude(s_name='小李')
# order_by :排序 +:升序 -:降序
#排序,安照id升序/降序===>asc/desc
# stus=Student.objects.all().order_by('id')
# stus = Student.objects.all().order_by('-id')
# values-->获取单个字段
# stus=Student.objects.all().values('id')
# return HttpResponse(stus)
# get(),first()-->获取单个对象
# stus=Student.objects.get(id=2)
# stus=Student.objects.filter(id=100).first()
# return HttpResponse(stus)
#first(),last()-->获取单个对象
# stus=Student.objects.all().order_by('id').last()
# stus = Student.objects.all().order_by('-id').first()
# stus = Student.objects.all().order_by('-id')[0]
# return HttpResponse(stus.id)
# 切片--->前面那个下标要考虑取值范围,后面那个不用
# stus = Student.objects.all().order_by('-id')[:100]
# 模糊查询
# select * from student name like '%李%'
# stus=Student.objects.filter(s_name__contains='哈')
# select * from student name like '小%'
# stus = Student.objects.filter(s_name__startswith='小')
# select * from student name like '%王'
# stus = Student.objects.filter(s_name__endswith='王')
#isnull/isnotnull判断是否为空
# stus = Student.objects.filter(s_name__isnull=False)
# stus = Student.objects.filter(s_name__isnotnull=False)
# in 判断在范围之内
# stus=Student.objects.filter(id__in=[1,2,6])
# 年龄大于16
# stus = Student.objects.filter(s_age__gt=16)
#pk
# stus = Student.objects.filter(id=3)
# stus=Student.objects.filter(pk=3)
# Q(),查询姓名叫小花的,或者年龄为18
# stus=Student.objects.filter(Q(s_name='小李') | Q(s_age=20))
# stus = Student.objects.filter(Q(s_name='小李') & Q(s_age=20))
# 查询姓名不叫小花的,或者年龄为18
# stus = Student.objects.filter(~Q(s_name='小李') | Q(s_age=20))
# 获取学生姓名
# 方法一
# for stu in stus:
# print(stu.s_name)
# 方法二
# stu_names=[stu.s_name for stu in stus]
# print(stu_names)
# return HttpResponse(stu_names)
def delete_stu(request):
#删除
stu=Student.objects.get(pk=1)
stu = Student.objects.filter(pk=1).first()
stu.delete()
return HttpResponse('删除')
def update_stu(request):
#更新
# 方法一
stu=Student.objects.get(pk=3)
stu.s_name='小将'
stu.save()
# 方法二
Student.objects.filter(id=2).update(s_name='哈哈')
return HttpResponse('修改')
3.urls.py设置url
from django.conf.urls import url
from django.contrib import admin
from app import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url('create_stu/',views.create_stu),
url('select_stu/',views.select_stu),
url('delete_stu/',views.delete_stu),
url('update_stu/',views.update_stu),
]
网友评论