Django关于ORM的增删改查

Django中使用orm进行数据库的管理,主要包括以下步骤

1、创建model,

2、进行迁移

3、在视图函数中使用

以下的内容可以先从查询开始看,这样更容易理解后面删除部分代码

主要包括几下几种:

1、增

1)实例例化model,代码如下:

复制代码
def submit(request):
    if request.method == 'GET':
        html = open("submit.html", encoding="utf-8").read()
        return HttpResponse(html)
    elif request.method == 'POST':
        # 获取提交的表单数据
        data = json.loads(request.body)
        print("请求数据",data)
        obj = Feedback()
        obj.quality = data.get('quality', 0)
        obj.attitude = data.get('attitude', 0)
        obj.speed = data.get('speed', 0)
        obj.text = data.get('text', '')
        obj.anonymous = data.get('anonymous', False)
        obj.save()
        request.session['feedback_data'] = data
        return JsonResponse({'status': 'success'})

但是这种方式有个弊端,就是需要写好几行,那么其实是有更简单的方式,就是调用类方法

2)调用类方法,代码如:

复制代码
def submit(request):
    if request.method == 'GET':
        html = open("submit.html", encoding="utf-8").read()
        return HttpResponse(html)
    elif request.method == 'POST':
        # 获取提交的表单数据
        data = json.loads(request.body)
        print("请求数据",data)

        Feedback.objects.create(**data)
        return JsonResponse({'status': 'success'})

这种方法其实就是实例化之后,然后调用save方法,只不过是把这两个步骤进行封装

2、删,这里也是包括两种方法

1)第一种方法是实例化模型,直接调用delete方法,代码:

复制代码
 obj_list: list[Feedback] = Feedback.objects.filter(id=2).filter(anonymous=True)  # 获取id等于2,并且是匿名的数据
        for obj in obj_list:
            obj.delete() #删除数据
            print(f"obj={obj}")

2)调用类方法,代码如:

复制代码
def submit(request):
    if request.method == 'GET':
        html = open("submit.html", encoding="utf-8").read()
        return HttpResponse(html)
    elif request.method == 'POST':
        # 获取提交的表单数据
        data = json.loads(request.body)
        print("请求数据",data)
        obj:Feedback = Feedback.objects.filter(id=4).delete()
        obj_list: list[Feedback] = Feedback.objects.filter(id=2).filter(anonymous=True)  # 获取id等于2,并且是匿名的数据
        for obj in obj_list:
            obj.delete() #删除数据
            print(f"obj={obj}")

        return JsonResponse({'status': 'success'})

3、改,一共有两种方式:

1)修改实例对象

把id等于3的text字段值更改为:你好,代码如下:

复制代码
 obj:Feedback = Feedback.objects.get(id=3) #获取id等于3的数据
        print("obj",obj.text)
        #把id等于3的text字段值更改为:你好
        obj.text = "你好"
        # 修改之后一定要重新保存
        obj.save()

2)调用类方法:

4、查,比如获取id等于3的text字段内容,

复制代码
obj:Feedback = Feedback.objects.get(id=3) #获取id等于3的数据
        print("obj",obj.text)

查询是获取model实例对象的过程

1)获取单个对象:

复制代码
obj:Feedback = Feedback.objects.get(id=3) #获取id等于3的数据

还有一种方式可以通过过滤,比如获取id等于3,代码如:

复制代码
        obj_list: list[Feedback] = Feedback.objects.filter(id=3)  # 获取id等于3

2)获取全部的数据:

复制代码
 obj_list: list[Feedback] = Feedback.objects.all()  # 获取全部数据
        for obj in obj_list:
            print(f"obj={obj}")

3)获取指定的数据,比如获取前100条数据:

复制代码
        obj_list: list[Feedback] = Feedback.objects.all()[:100]  # 获取前100条数据

4)条件查询:

等于:=

复制代码
 obj_list: list[Feedback] = Feedback.objects.filter(id=2) # 获取id等于2的数据

大于:__gt

复制代码
obj_list: list[Feedback] = Feedback.objects.filter(id__gt=2)  # 获取前id大于2的数据

大于等于:__gte

复制代码
 obj_list: list[Feedback] = Feedback.objects.filter(id__gte=2)  # 获取前id大于等于2的数据

小于:__lt

复制代码
        obj_list: list[Feedback] = Feedback.objects.filter(id__lt=2)  # 获取前id小于2的数据

小于等于:__lte

复制代码
        obj_list: list[Feedback] = Feedback.objects.filter(id__lte=2)  # 获取前id小于等于2的数据

包含:__in

复制代码
 obj_list: list[Feedback] = Feedback.objects.filter(id__in=2)  # 获取前id包含2的数据

不包含:exclude

复制代码
     obj_list: list[Feedback] = Feedback.objects.all().exclude(id=2)  # 获取前id不包含2的数据

可以加入多个条件进行查询,比如查询id不等于1,也不等于2的数据

复制代码
        obj_list: list[Feedback] = Feedback.objects.all().exclude(id=2).exclude(id=3)  # 获取前id不包含2的数据

也可以有id等于1同时id等于2:

复制代码
        obj_list: list[Feedback] = Feedback.objects.filter(id=2).filter(id=3)  # 获取id既等于2又等于3的数据

查询条件可以有多种不同的组合,比如 获取id等于2,并且是匿名的数据

复制代码
        obj_list: list[Feedback] = Feedback.objects.filter(id=2).filter(anonymous=True)  # 获取id等于2,并且是匿名的数据

5、底层sql,通过调用query方法,可以查看到执行的sql语句,代码:

复制代码
def submit(request):
    if request.method == 'GET':
        html = open("submit.html", encoding="utf-8").read()
        return HttpResponse(html)
    elif request.method == 'POST':
        # 获取提交的表单数据
        data = json.loads(request.body)
        print("请求数据",data)
        # obj:Feedback = Feedback.objects.filter(id=4).delete()
        obj_list: list[Feedback] = Feedback.objects.filter(id=2).filter(anonymous=True)  # 获取id等于2,并且是匿名的数据
        print(f"sql={obj_list.query}") #显示sql语句
        for obj in obj_list:
            obj.delete() #删除数据
            print(f"obj={obj}")
复制代码
from django.db import connection
def my_sql():
    with connection.cursor() as cursor:
       cursor.execute("""
       SELECT "lili_feedback"."id", "lili_feedback"."quality", "lili_feedback"."attitude", "lili_feedback"."speed", "lili_feedback"."text", "lili_feedback"."anonymous", "lili_feedback"."created_at", "lili_feedback"."updated_at" FROM "lili_feedback" LIMIT 100;

       """)
       row = cursor.fetchone()
       print(row)
       return row
相关推荐
清流君2 分钟前
【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作
数据库·人工智能·笔记·mysql·ue5·数字孪生
邂逅岁月2 分钟前
MySQL表的增删改查初阶(下篇)
数据库·sql·mysql
Python_金钱豹3 分钟前
Text2SQL零代码实战!RAGFlow 实现自然语言转 SQL 的终极指南
前端·数据库·sql·安全·ui·langchain·机器人
静听夜半雨5 分钟前
CANoe入门——3、新建LIN工程及LIN DataBase(LDF文件)的创建
网络·数据库·c++·编辑器
DarkAthena1 小时前
【ORACLE】记录一些ORACLE的merge into语句的BUG
数据库·oracle·bug
大新新大浩浩2 小时前
arm64适配系列文章-第三章-arm64环境上mariadb的部署
数据库·arm·mariadb
聪明的墨菲特i2 小时前
SQL进阶知识:九、高级数据类型
xml·数据库·sql·mysql·json·空间数据类型
oioihoii2 小时前
金仓数据库 KingbaseES 产品深度优化提案:迈向卓越的全面升级
数据库·性能优化·金融·金仓数据库 2025 征文·数据库平替用金仓
BXCQ_xuan2 小时前
Django API 响应格式:一个新手踩坑记
python·django·状态模式
艺杯羹2 小时前
JDBC 批处理与事务处理:提升数据操作效率与一致性的密钥
数据库·mysql·jdbc·事务处理·批处理数据