企业网站建设价格表,研发项目管理系统,北京网络科技公司有哪些,sem推广平台有哪些Django通过Model操作数据库, 不管你数据库的类型是MySql或者Sqlite, Django自动帮你生成相应数据库类型的SQL语句,所以不需要关注SQL语句和类型,对数据的操作Django帮我们自动完成。只要会写Model就可以了。 django使用对象关系映射 (Object Relational Mapping, 简称ORM)框… Django通过Model操作数据库, 不管你数据库的类型是MySql或者Sqlite, Django自动帮你生成相应数据库类型的SQL语句,所以不需要关注SQL语句和类型,对数据的操作Django帮我们自动完成。只要会写Model就可以了。 django使用对象关系映射 (Object Relational Mapping, 简称ORM)框架去操控数据库。 ORM(Object Relational Mapping)对象关系映射, 是一种程序技术, 用于实现面向对象编程语言里不同类型系统的数据之间的转换。
一、模型
from django.db import models# Create your models here.
class StudentModel(models.Model):namemodels.CharField(max_length20,uniqueTrue) #唯一的agemodels.PositiveIntegerField(default18)class Meta:db_tablestudentverbose_name学生verbose_name_pluralverbose_name#重写字符串def __str__(self):return f{self.name}{self.age}#重写替换def __repr__(self):return f{self.name}{self.age} 二、CRUD的操作 (1) 添加有4种方式
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.# 添加数据
from User.models import StudentModel# 第一种方式
def save_stu(request):# 处理异常try:# 创建对象stu StudentModel()# 给属性赋值stu.name 刘芳stu.age 20# 保存数据(同步到数据库中)stu.save()except Exception as ex:return HttpResponse(添加失败)# 返回return HttpResponse(添加成功)# 第二种方式
def save_stu2(request):# 处理异常try:# 创建对象stu StudentModel(name张三, age19)# 保存数据(同步到数据库中)stu.save()except Exception as ex:return HttpResponse(添加失败)# 返回return HttpResponse(添加成功)# 第三种方式
def save_stu3(request):# 处理异常try:# 创建对象StudentModel.objects.create(name王涵, age30)except Exception as ex:return HttpResponse(添加失败)# 返回return HttpResponse(添加成功)# 第四种方式
def save_stu4(request):# 处理异常try:# 创建对象并返回stu StudentModel.objects.get_or_create(name芬芳, age21)print(stu, stu)except Exception as ex:return HttpResponse(添加失败)# 返回return HttpResponse(添加成功)# 第五种方式批量添加
def save_stu5(request):# 处理异常try:for i in range(5, 15):# 创建对象stu StudentModel.objects.create(namefboy{i}, agef{i})except Exception as ex:return HttpResponse(添加失败)# 返回return HttpResponse(添加成功) 说明使用create方法是最常用的第五种是批量添加数据 2删除数据1条或多条)
# 删除一条数据
# 1 先找到删除的数据
# 2 再删除数据
def del_stu(request):# 处理异常try:# 创建对象stu StudentModel.objects.first() # 删除第一条数据stu.delete() # 删除except Exception as ex:return HttpResponse(删除失败)# 返回return HttpResponse(删除成功)# 删除多条数据
# 1 先找到删除的数据
# 2 再删除数据
def del_stu2(request):# 处理异常try:StudentModel.objects.filter(age__gte20).delete() # 删除多条条件except Exception as ex:return HttpResponse(删除失败)# 返回return HttpResponse(删除成功) (3) 修改数据 1条或多条 模型没有定义update方法, 直接给字段赋值, 并调用save, 能实现update的功能, 比如: obj StudentModel.objects.get(id2) obj.name liu obj.save() save更新时会更新所有字段。如果只想更新某个字段, 减少数据库操作, 可以这么做: obj.name john obj.save(update_fields[name]) # 更新一条数据
# 1 先找到这条数据
# 2 再修改数据
def update_stu(request):# 处理异常try:# 创建对象stu StudentModel.objects.first() # 第一条stu.name mikestu.age 22# 保存到数据库中stu.save()except Exception as ex:return HttpResponse(更新失败)# 返回return HttpResponse(更新成功)# 更新1条数据
# 1 先找到这条数据
# 2 再修改数据
def update_stu2(request):# 处理异常try:# 创建对象stu StudentModel.objects.get(id18) # 根据id条件stu.name johnstu.age 20# 保存到数据库中stu.save()except Exception as ex:return HttpResponse(更新失败)# 返回return HttpResponse(更新成功)# 更新多条数据
# 1 先找到这条数据
# 2 再修改数据
def update_stu3(request):# 处理异常try:# 创建对象StudentModel.objects.all().update(age25) # 所有数据更新年龄为25except Exception as ex:return HttpResponse(更新失败)# 返回return HttpResponse(更新成功)4查询数据 get(): 获取单条数据: StudentModel.objects.get(id100) 如果没有找到符合条件的对象, 会引发模型类.DoesNotExist异常 如果找到多个, 会引发模型类.MultipleObjectsReturned异常 first(): 返回查询集(QuerySet)中的第一个对象 last(): 返回查询集中的最后一个对象 count(): 返回当前查询集中的对象个数 exists(); 判断查询集中是否有数据, 如果有数据返回True没有反之False all(): 获取全部数据: StudentModel.objects.all() # 查询操作
def get_stu(request):# (1) get():获得一条数据stu StudentModel.objects.get(id18)# first 第一条数据# stu StudentModel.objects.first()# last 最后一条数据# stu StudentModel.objects.last()# 打印print(stu, type(stu))print(stu.name, stu.age)# 返回return HttpResponse(查询成功)def get_stu2(request):# (2) all():获得所有数据stu StudentModel.objects.all()# 打印print(stu, type(stu))for st in stu:print(st.name, st.age)# 返回return HttpResponse(查询成功)
查询 filter()过滤详解
def get_stu3(request):# (3) filter(): 过滤数据(常使用)# stuStudentModel.objects.filter() #默认没有条件就是获取所有的数据# stuStudentModel.objects.filter(age__lte26) #有条件,age26就是获取条件数据# stuStudentModel.objects.filter(age__gte26) #有条件,age26就是获取条件数据# stuStudentModel.objects.filter(age__gt26) #有条件,age26就是获取条件数据# stuStudentModel.objects.filter(age__lt26) #有条件,age26就是获取条件数据# 打印# print(stu, type(stu))# for st in stu:# print(st.name, st.age)# 如果使用的对象是返回结果集的对象可以链接是使用的# print(stu.filter().filter().all().filter())# 注意在使用链接对象一个对象如果是返回单个对象就表示链接结束# print(stu.filter().filter().get())# 显示调用中# print(stu.get())# print(stu.first())# print(stu.last())# 查询集是否存在数据如果存在数据为True,否则为False# print(stu.exists())# print(stu.all())# 查询数据中的个数# print(stu.count())# values方法和valeus_list()方法stus StudentModel.objects.filter()# 查询原数据print(stus)# 查询的结果集强制转换成列表print(list(stus))# 列表套字典print(stus.values())# 列表套字典(这个是是字段名)print(stus.values(name, age))# 列表套元组(只有值)print(stus.values_list())# 列表套元组(这个是是字段名)print(stus.values_list(name, age))# 返回return HttpResponse(查询成功)# filter详讲类似于sql的where条件
def get_stu4(request):# in# stus StudentModel.objects.filter(age__in[16,18,21])# not in 取反# stus StudentModel.objects.exclude(age__in[16,18,21])# like 模糊查询# stus StudentModel.objects.filter(name__containsy1)# 正则表达式 匹配m开头 ,区分大小写# stus StudentModel.objects.filter(name__regex^m)# 不区分大小写# stus StudentModel.objects.filter(name__iregex^M)# range 在16-21之间范围# stus StudentModel.objects.filter(age__range[16, 21])# 以b开头不区分大小写# stus StudentModel.objects.filter(name__startswithm)stus StudentModel.objects.filter(name__istartswithm)# 以n结尾不区分大小写# stus StudentModel.objects.filter(name__endswithn)# stus StudentModel.objects.filter(name__iendswithn)print(stus)# 返回return HttpResponse(查询成功) 聚合函数 导包 from django.db.models import Max,Avg,Min,Sum,Count 使用aggregate()函数返回聚合函数的值 Avg: 平均值 Count: 数量 Max: 最大 Min: 最小 Sum: 求和 #聚合函数: max,min,sum,avg,count
def get_stu5(request):from django.db.models import Max,Avg,Min,Sum,Count# stus StudentModel.objects.aggregate(Max(age))# stus StudentModel.objects.aggregate(Avg(age))# stus StudentModel.objects.aggregate(Sum(age))# stus StudentModel.objects.aggregate(Min(age))stus StudentModel.objects.aggregate(Count(age))print(stus)# 返回return HttpResponse(查询成功)
排序升序降序 升序order_by(字段名) 默认 降序order_by(-字段名) #排序: 升序降序
def get_stu6(request):#ASC 1个字段stus StudentModel.objects.all().order_by(age)#ASC 两个字段# stus StudentModel.objects.all().order_by(age,id)#DESC# stus StudentModel.objects.all().order_by(-age)print(stus)# 返回return HttpResponse(查询成功) 数据表