美文网首页
Django基础(二)- 数据的增删改查

Django基础(二)- 数据的增删改查

作者: 憧憬001 | 来源:发表于2019-01-03 19:15 被阅读0次

ORM (object relationship mapping): 对象关系映射
使用SQL语句对数据进行增删改查虽然很方便,但不同的数据库总有大大小小的差异
这时ORM就可来消除这中差异,对于不同的数据库它可以转化成不同的语句,在一些方面减少了工作量

1.准备工作

创建应用: python manage.py startapp 应用名称

在创建的应用工程文件下的models.py添加模型
下面添加一个学生表

from django.db import models


# Create your models here.


class Student(models.Model):
    s_name = models.CharField(max_length=10, unique=True)
    s_age = models.IntegerField(default=20)
    s_gender = models.BooleanField(default=1)
    # auto_now_add:创建时默认字段赋值为最新时间
    create_time = models.DateTimeField(auto_now_add=True)
    # auto_now:修改数据时,自动赋值为更新字段的时间
    update_time = models.DateTimeField(auto_now=True)
    math = models.DecimalField(max_digits=3, decimal_places=1, null=True)
    physics = models.DecimalField(max_digits=3, decimal_places=1, null=True)

    class Meta:
        db_table = 'student'

2.在项目工程目录下settting文件中添加对应的url

urlpatterns = [

    path('admin/', admin.site.urls),
    # http://127.0.0.1:8080/hello/
    path('hello/', views.hello),

    path('add_stu/', views.add_stu),

    path('del_stu/', views.del_stu),

    path('up_stu/', views.up_stu),

    path('sel_stu/', views.sel_stu),
]

然后需要在views.py中添加对应的方法

from django.db.models import Avg, Max, Min, Sum, Count, Q, F
from django.shortcuts import render

# Create your views here.

from django.http import HttpResponse

from app.models import Student


def hello(request):
    # 读取数据库
    # 渲染页面
    return HttpResponse('<h1>hello world</h1>')


def add_stu(request):
    """添加信息"""
    # 方法一
    Student.objects.create(s_name='张三丰', s_age=99)
    # 方法二
    stu = Student()
    stu.s_name = '老白'
    stu.s_age = 60
    stu.save()

    return HttpResponse('添加成功')


def del_stu(request):
    """删除信息"""
    Student.objects.filter(id=3).delate()

    return HttpResponse('删除成功')


def up_stu(request):
    """更新信息"""
    # 方法一
    Student.objects.filter(id=6).update(math=90, physics=88)
    # 方法二
    stu = Student.objects.filter(id=7).first()
    stu.math = 99
    # stu.physics = 100
    stu.save()
    return HttpResponse('更新成功')


def sel_stu(request):
    """查询学生信息"""
    # 查询全部
    stus = Student.objects.all()
    for stu in stus:
        print(stu.s_name, stu.s_gender)

    stu = Student.objects.filter(id=4).first()
    print(stu)

    # 1. get() 取唯一的一个对象
    # 2.  get()  条件必须成立      上面的filter如果条件没有,返回为空
    stu = Student.objects.get(id=4)  # 与前面的方法一样 但只能取唯一一个
    print(stu)

    # 过滤掉不满足掉件的
    stus = Student.objects.exclude(s_gender=0)
    print(stus)

    # 排序
    stus = Student.objects.order_by('-id')    # 加  “-” 就降序
    print(stus)

    # 取出对象中的某个字段
    stus = Student.objects.all().values('s_name', 's_age')
    print(stus)
    stus = Student.objects.all().values()  # 工作中比较有用 据说获取时间快
    print(stus)

    # 判断查询结果是否存在 exists()
    a = Student.objects.filter(s_name='校长').exists()
    b = Student.objects.filter(s_gender=1).count()
    print(a)
    print(b)

    # 字段__运算符
    # 包含,模糊查询;contains
    stus = Student.objects.filter(s_name__contains='鲲')
    print(stus)

    # slq中 like
    # startswith   endswith
    stus = Student.objects.filter(s_name__startswith='张')
    print(stus)
    stus = Student.objects.filter(s_name__endswith='三')
    print(stus)

    # sql   where id in(1,2,3,4,5,6)
    stus = Student.objects.filter(id__in=[1, 2, 3, 4, 5, 6, 7, 8])
    print(stus)
    stus = Student.objects.filter(pk__in=[1, 2, 3, 4, 5, 6, 7, 8])
    print(stus)

    # gte 大于等于  gt 大于         lt 小于   lte 小于等于
    stus = Student.objects.filter(s_age__gte=18, s_age__lte=22)  # 18<=  <=22
    print(stus)
    stus = Student.objects.filter(s_age__gte=18).filter(s_age__lte=22)  # 和上面查询的结果相同
    print(stus)
    # Q() 中间以 | 隔开
    stus = Student.objects.filter(Q(s_age__gte=18) | Q(s_age__lte=22))  # 18<= 或  <=22
    print(stus)
    stus = Student.objects.filter(Q(s_age__gte=18) & Q(s_age__lte=22))  # 与
    print(stus)
    stus = Student.objects.filter(~Q(s_age__gte=18))  # 非

    print(stus)

    # 聚合  Avg  Max  Min  Sum  Count
    age_avg = Student.objects.all().aggregate(Avg('s_age'))
    age_max = Student.objects.all().aggregate(Max('s_age'))
    age_min = Student.objects.all().aggregate(Min('s_age'))
    age_sum = Student.objects.all().aggregate(Sum('s_age'))
    age_count = Student.objects.all().aggregate(Count('s_age'))
    print(age_avg)
    print(age_max)
    print(age_min)
    print(age_sum)
    print(age_count)

    # 查询物理成绩大于数学成绩的学生姓名
    # 方法一
    stus = Student.objects.all()
    for stu in stus:
        if stu.physics > stu.math:
            print(stu.s_name)
    # 方法二
    stus = Student.objects.filter(physics__gt=F('math')).values()
    print(stus)

    return HttpResponse('查询信息成功')

相关文章

  • Django基础(二)- 数据的增删改查

    ORM (object relationship mapping): 对象关系映射使用SQL语句对数据进行增删改查...

  • 关于python的list的增查删改

    说到增查删改,想起了数据库,我们在关系型数据库当中就会对表进行增查删改。 在python当中我们也可以对list进...

  • MYSQL数据库的增删改查

    MYSQL数据库的增删改查 一.对于库的增删改查 增create database 库名称;create data...

  • 增删改

    对于表中的操作,就是增删改查,查内容较多,这里先说增删改。 1.增(insert或者load) 即插入数据,多行插...

  • 数据库的存储

    如何创建数据库 数据库的增删改查 增insert into student (name,phone) values...

  • SQL查询结构总结

    SQL 增删改查 对数据库有修改的操作是:增删改 增 insert into 表名 values(); 删 del...

  • 表内容的操作

    对表数据进行增删改查(curd) 增(insert into): auto_increment自增长 SELECT...

  • django2实战3.模型的增删改查

    继上篇 django2实战2.创建博客应用 django对数据的操作采用的是ORM模式,即将数据库的增删改查抽象成...

  • day11

    vue前端,实现基础的增删改查 1.json数据 2.js代码 3.将数据绑定到html里面 主要还是增删改查的语句

  • SQL语句

    数据库的增删改查 数据表的增删改查 表内记录的增删改查

网友评论

      本文标题:Django基础(二)- 数据的增删改查

      本文链接:https://www.haomeiwen.com/subject/nduqrqtx.html