首页 > 数据库 >PythonWeb项目开发(Django)数据增删改查的常用方法汇总以及Q,F对象的使用(模型与mysql数据库绑定之后)

PythonWeb项目开发(Django)数据增删改查的常用方法汇总以及Q,F对象的使用(模型与mysql数据库绑定之后)

时间:2024-11-02 19:45:06浏览次数:6  
标签:get 对象 改查 Django filter objects User mysql id

知识点

:模型类的管理器方法:create(),模型对象的方法save()

:模型类的管理器方法:all(),filter(),exclude(),get()

        扩展常见的运算符(用于用户查询,删除,更新的条件):gt,gte,it,ite,in,range,exact,contains,icontains,startswith,isstartswith,endswith,iendswith

:对根据条件查询的结果返回的QuerySet对象(不能是模型对象,即不能使用模型类的管理器的get()方法),进行更新。QuerySet对象的方法:update()

:对根据条件查询的结果返回的QuerySet对象和模型类对象进行更新。

用于字段与字段之间相互比较的F对象

用于多条件查询的Q对象

使用提醒

1.本文章适PyCharm中成功创建django项目,成功创建应用(这里是blog应用),成功创建模型并与数据库绑定之后的项目。

2.本次展示的代码为了便于演示,均在PyCharm的终端的Django Shell运行。前置步骤如下:

        1.在PyCharm项目打开终端(快捷键:alt + F12)。

        2.使用命令进入Django Shell :

python manage.py shell

        3.将应用(这里是blog应用)中的models.py里面定义的模型导入,如下:(自行类比哈)

# 导入模型类
from blog.models import User
# 导入Q对象和F对象,为后续使用Q,F对象做准备
from django.db.models import Q
from django.db.models import F

测试项目目录结构以及关联的数据表userinfo的字段如下:

数据的增查改删

增 create() save()的使用:

# 向用户表(userinfo)添加数据
def add_user(request):
    # 使用模型类的管理器的方法:  create()
    # 模型类的默认管理器对象:User.objects,使用即可
    User.objects.create(id=2, is_del=0, name='李四', password='123456', phone='12345678901', email='[email protected]',
                        student_id=20240002, describe='帅哥')
    # 使用模型对象的方法 save(),即先创建模型类的实例对象,再调用该对象的save()方法保存到数据表
    user1 = User(is_del=0, name='王五', password='123456', phone='12345678902'
                 , email='[email protected]', student_id=20240003, describe='帅哥')
    user1.save()

查 all() filter() exclude() get()的使用以及常用运算符:

# 从单表中找到任意数量的记录
def find_user_or_users():
    # 常用方法
    # 1.全表查询 使用模型类的管理器的方法:all() 结果返回QuerySet对象
    all_users = User.objects.all()
    print(all_users)
    # 2.部分查询 使用模型类的管理器的方法:filter() exclude()
    # filter()结果返回满足条件的所有记录的QuerySet对象
    # exclude()结果返回zh满足条件的记录之外的所有记录的QuerySet对象
    filter_users = User.objects.filter(is_del=0)
    exclude_users = User.objects.exclude(is_del=1)  # 这个不常用
    # Tips:如需要使用多个条件同时满足的查询,直接将每个条件用","分隔开即可,如下
    filter_users2 = User.objects.filter(is_del=0, name="张三")
    # 3.单条记录查询 使用模型类的管理器的方法:filter() 结果返回单条记录对应的模型对象
    user1 = User.objects.get(id=2)
    # 常用的运算符基本形式:“属性名称_比较对象=值(这里仅仅是字段与常量值的比较,不包括字段与字段的比较)
    # 常用运算符:gt,gte,it,ite,in,range,exact,contains,icontains,startswith,isstartswith,endswith,iendswith)
    # 可以实现大于,大于等于,小于,小于等于,是否在指定区间,是否精确相等,是否精确相等(忽略大小写),是否指定字段值开头,是否以指定字段值结尾
    # 例如:找到id大于等于1的单条记录
    user2 = User.objects.get(id__gte=1)

改 update()的使用:

# 更新数据,一般要先找到符号条件的记录再做更新,故 update() 一般要和查询的方法一起使用。
# 但请注意:管理器的get()方法获得的模型对象,而不是QuerySet对象,故无update()方法
def update_user(request):
    # 一个或多个符合条件的记录统一修改相应的字段 使用模型类的管理器的方法:update()
    User.objects.filter(id=2).update(is_del=1)
    # 以下错误的写法, 管理器的 get() 方法返回的是模型对象,无 update() 方法。
    User.objects.get(id=2).update(is_del=0)
    # 如要更新单个实例,可用save()方法:先查询,在改属性,最后用save()提交
    user = User.objects.get(id=2)
    user.is_del = 1
    user.save()

删 delete()的使用:

# 删除数据
def delete_user(request):
    # 删除数据使用的是对象的方法,包括管理器对象和模型对象,以下两种方式均可以删除
    # get()方法删除一条数据
    # filter()方法删除多条数据
    # tips:删除之后id的连贯性大概率会被破坏,比如id=1,id=2,id=3的3条记录,在删掉id=2的记录后,就只剩下id=1,id=3的记录了
    # 查询返回的QuerySet对象,可以调用删除方法,注意与update()方法区分
    user1 = User.objects.filter(~Q(id=3) & Q(name="王五"))
    user1.delete()
    # 查询返回的模型对象,也可以调用删除方法,注意与update()方法区分
    user2 = User.objects.get(id=2)
    user2.delete()

F对象的使用

       用途:之前的条件都是字段与常数值的比较,没有挑战性,使用F对象可实现字段与另一个字段的比较。如下:

# 错误的写法:没有使用F对象
User.objects.get(id__lte=student_id)
# 错误的写法:F对象没有传入一个字符串
User.objects.get(id__lte=F(student_id))
# 正确的写法:'student_id'为表的字段名
User.objects.get(id__lte=F('student_id'))

Q对象的使用

        用途:Q对象之间支持与(&),或(|),非运算(~),完成条件的逻辑运算。

        语法:Q(属性名__运算符=值),即将查询,更新,删除所传递的一个或多个条件用Q对象包裹起来。如下:

# 报错的写法
user1 = User.objects.filter(  id=3  &   name="王五")
# 正确的写法
user1 = User.objects.filter(   Q(id=3) & Q(name="王五"))
user1 = User.objects.filter(   ~Q(id=3) & Q(name="王五")) # 加入取反符号

       

标签:get,对象,改查,Django,filter,objects,User,mysql,id
From: https://blog.csdn.net/Dsx20224673/article/details/143445991

相关文章

  • 大数据毕业设计django基于大数据的汽车销售可视化系统
    前言近年来,随着互联网的蓬勃发展,企事业单位对信息的管理提出了更高的要求。以传统的管理方式已无法满足现代人们的需求。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,随着各行业的不断发展,汽车销售可视化系统分析系统也逐渐进入了信息化的进程。这个系统的设......
  • 【MySql】 搭建主从复制
    一、概述 主从复制是指将主库的数据变更同步到从库,从而保证主库和从库数据一致,可用于数据备份、失败迁移、读写分离、降低单库读写压力等场景。对于面向大企业的B端产品而言,主从复制技术尤为重要。1.1什么是主从复制主从复制是指将主库的DDL和DML操作通过二进制日志传......
  • django敬老院管理信息系统-毕业设计源码15020
    摘 要本文详细阐述了基于Django框架的敬老院管理信息系统的设计与实现过程。该系统以Django这一高级PythonWeb框架为基础,充分利用其强大的数据库访问组件、灵活的URL设计、丰富的模板系统以及高效的安全机制,为敬老院的日常管理工作提供了全面、高效的支持。该系统针对......
  • Python+Django框架淘宝茶叶销售数据可视化系统网站作品截图和开题报告参考
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩,提供核心代码讲解,答辩指导。项目配有对应开发......
  • hadoop+Spark+django基于大数据技术的高校岗位招聘平台与数据可视化分析(源码+文档+调
    收藏关注不迷路!!......
  • 【MySQL系列】理解 `utf8mb4` 和 `utf8mb4_unicode_ci`
    ......
  • mysql数据误删后的数据回滚
    mysql数据误删后的数据回滚第一步:下载MyFlash工具#创建文件夹mkdir/back_datacd/back_data#下载压缩包wgethttps://codeload.github.com/Meituan-Dianping/MyFlash/zip/master#安装编译相关软件yuminstallgcc-yyuminstallglib2glib2-devel-y#解压缩......
  • PythonWeb项目开发(Django)在PyCharm定义模型并与mysql数据库绑定
    测试所用的django项目结构如下:---------------------------------------------------------------------------------------------------------------------------------定义模型(以创建好的blog应用为例):重点操作对象1:之前创建应用(这里是blog文件夹)下面的models.py文件......
  • JDBC连接mysql进行curd操作
    使用JDBC连接mysql数据库一.JDBC是什么JDBC(JavaDatabaseConnectivity)Java连接数据库的规范(标准),可以使用Java语言连接数据库完成CRUD操作。二.导入maven依赖<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>......
  • 如何在 MySQL 中创建一个完整的数据库备份?
    在MySQL数据库中创建一个完整的数据库备份通常不是通过编程语言直接实现的,而是借助MySQL提供的命令行工具mysqldump来完成。作为Java开发者,我们可以编写脚本来调用这些工具,从而实现自动化备份。下面我们将详细介绍如何使用Java来调度mysqldump工具进行数据库备份。创建数据......