Django实现数据的增删改查


二、需求:添加数据并入库

1.定义model

代码如下(示例):

from django.db import models

# Create your models here.

class Student_Models(models.Model):
    sname = models.CharField(max_length=30,unique=True)
    spwd = models.CharField(max_length=30)

#     定义表名
    class Meta:
        db_table = 't_stu'

2.post请求,json格式+手动(save)数据入库

代码如下(示例):

import json
# 操作数据库 1.json接收数据  2.存储到数据库
# utl:ceshi/add1/
def add_view1(request):
    # 1.接收json数据
    request = request.body.decode()
    data = json.loads(request)
    print(data)
    # {'sname': '马云', 'spwd': 'mayun'}
    # 2.手动save添加到数据库
    name = data['sname']
    password = data['spwd']

    # 3.添加数据库
    add = Student_Models(sname=name,spwd=password)
    add.save()

    return HttpResponse('OK')

在这里插入图片描述

3.post请求,表单格式+自动(creat)数据入库

代码如下(示例):

# utl:ceshi/add2/
"""
sname:"白云"
"""
def add_view2(request):
    # 1.接收表单数据
    username = request.POST.get("sname")
    password = request.POST.get('spwd')

 	# 2.入库
    Student_Models.objects.create(sname=username,spwd=password)
    return HttpResponse('json')

在这里插入图片描述

三、需求:查询数据

1.全部查询与单一查询

在这里插入图片描述

代码如下(示例):

# 查询url:ceshi/get/
def get_view(request):
    # 1.获取全部,得到的是一个查询集QuerySet:返回对象列表
    #     查询结果集转换成json格式:方式一:转换成json数据的话,【{}{}{}】
    #                              方式二:模型转换成json:序列化
    datas = Student_Models.objects.all()
    data_values = datas.values() #返回各个对象的值
    # data_values = Student_Models.objects.all().values()

    # data_value还是QuerySet数据,没办法返回给前端,转换成列表
    data2 = list(data_values)

    context = {
        'code':200,
        'data':data2,
        'message':'查询所有数据成功'
    }


    data = Student_Models.objects.get(id=1)
    print(data.sname)  #2.获取单一结果对象:Student_Models object (1)+get请求没有.values()+查询结果是多条的情况下,不能使用get,会报错,比如两个名字都叫马云,按照马云进行查询,会报错

	data4 = Student_Models.objects.filter(spwd="123").values() #查询多条密码都是123的信息
    print(data4)

    return JsonResponse(context)
    
"""
datas=<QuerySet [<Student_Models: Student_Models object (1)>, <Student_Models: Student_Models object (2)>,
 <Student_Models: Student_Models object (3)>, <Student_Models: Student_Models object (4)>,
  <Student_Models: Student_Models object (7)>, <Student_Models: Student_Models object (8)>, 
  <Student_Models: Student_Models object (9)>, <Student_Models: Student_Models object (10)>]>
[16/Sep/2020 21:15:33] "GET /ceshi/get/ HTTP/1.1" 200 201

data_values=
<QuerySet [{'id': 1, 'sname': 'zhangsan', 'spwd': '123'}, {'id': 2, 'sname': 'admin', 'spwd': '1qaz2WSX'}, {'id': 3, 'sname': 'majialu', 'spwd': '123456'}, {'id': 4, 'sname': 'lixian', 'spwd': '123'}, {'id': 7, 'sname': 'lala', 'spwd': '1233'}, {'id': 8, 'sname': '4566', 'spwd': '456'}, {'id': 9, 'sname': '马云', 'spwd': 'mayun'}, {'id': 10, 'sname': '白云', 'spwd': '456'}]>
Student_Models object (1)
"""

注意:
1.filter返回的是列表,filter过滤出多个结果,GET返回的是单一结果
2.查询不存在的时候,filter返回空列表,get返回报错抛出模型类.DoesNotExist异常;
3返回对象列表的有:all():返回所有数据;
                  filter():返回满足条件的数据;
                  exclude():返回满足条件之外的数据;
                  order_by():对结果进行排序;

后台返给前端的数据:
在这里插入图片描述

四、删除

url:ceshi/ceshiadd1

代码如下(示例):

def shanchu(request):
    # 删除哪一个,取数据
    data = json.loads(request.body.decode())
    name = data["sname"]

    Student_Models.objects.filter(sname=name).delete() # 可以删除多条记录
    Student_Models.objects.get(sname=name).delete()  #删除1条记录


    back={
        "code":200,
        "message":"删除成功"
    }

    return JsonResponse(back)

五、修改

url:ceshi/ceshiadd1

代码如下(示例):

def xiugai(request):
    # 修改哪一个,取数据
    data = json.loads(request.body.decode())
    id = data["id"]
    name = data["sname"]

    Student_Models.objects.filter(id=id).update(sname=name) 


    back={
        "code":200,
        "message":"修改成功"
    }

    return JsonResponse(back)


总结

ORM优点: 1.不用sql语句 2.开发效率高 3.不用关注使用的是什么数据库,直接执行就好 通过简单的配置就可以轻松更换数据库,而不需要修改代码

缺点:
1.需要记住特殊语法


版权声明:本文为weixin_43617871原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。