【Django】Django之ORM数据库查询及获取数据操作

简介: 【Django】Django之ORM数据库查询及获取数据操作

Django】Django之ORM数据库查询及获取数据操作

1、题外-POST请求-接收前端传来的参数

import json
class Register(View):
    def post(self, req):
        body = json.loads(req.body)
        print(body, "body")  # {'username': '111', 'email': '111@qq.com', 'password': '111'} body
        print(body["email"]) # 1231@qq.com

2、models-数据模型

# 权限表
class Permissions(models.Model):
    menu = models.TextField(verbose_name='权限菜单')
# 角色表
class Role(models.Model):
    title = models.CharField(verbose_name='角色名称', max_length=32)
    status = models.IntegerField(verbose_name='状态', default=0)
    permissions = models.ForeignKey(verbose_name='权限', to='Permissions', to_field='id', null=True, blank=True, on_delete=models.SET_NULL)
# 用户表
class Users(models.Model):
    username = models.CharField(verbose_name='用户名', max_length=32)
    email = models.CharField(verbose_name='邮箱', max_length=64)
    password = models.CharField(verbose_name='密码', max_length=64)
    status = models.IntegerField(verbose_name='状态', default=0)
    role = models.ForeignKey(verbose_name='角色', to='Role', to_field='id', null=True, blank=True, on_delete=models.SET_NULL)

3、数据库查询

from app import models
#查询所有
doc = models.Users.objects.filter()
print(doc)  # <QuerySet [<Users: Users object (1)>]>
# 条件查询-当返回为空时
  # filter(**args)
        doc = models.Users.objects.filter(email=body["email"])
        print(doc)  # <QuerySet []>
        if not doc:
            print('查询为空')
  # filter(**args).values()
      doc = models.Users.objects.filter(email=body["email"]).values()
      print(doc)  # <QuerySet []>
      if not doc:
            print('查询为空')
    # filter(**args).first()
      doc = models.Users.objects.filter(email=body["email"]).first()
      print(doc)  # None
      if not doc:
            print('查询为空')
# 条件查询-当返回不为空时
  # filter(**args)
        doc = models.Users.objects.filter(email=body["email"])
        print(doc)  # <QuerySet [<Users: Users object (1)>]>
        data_dict = []  # 定义数组
        for i in doc:
            data_dict.append({  # 添加每一个对象
                "id": i.id,
                "username": i.username,
                "email": i.email,
                "password": i.password,
                "status": i.status,
                "role_title": i.role.title,  # 去关联的角色表查询角色名称
                "role_permissions_menu": i.role.permissions.menu  # 查询权限
            })
        print(data_dict, 'data_dict')
      # [{'id': 1, 'username': 'admin', 'email': '13400405244@163.com', 'password': 'admin', 'status': 1, 'role_title': '超级管理员', 'role_permissions_menu': '["all_btn","all_router"]'}] data_dict
  # filter(**args).first()
      doc = models.Users.objects.filter(email=body["email"]).first()
        print(doc)  # Users object (1)
        print(doc.username)  # admin
        print(doc.role.title)  # 超级管理员
  # filter(**args).values() 需要list一下
      doc = list(models.Users.objects.filter(email=body["email"]).values())
        print(doc, "doc")  
        # [{'id': 1, 'username': 'admin', 'email': '13400405244@163.com', 'password': 'admin', 'status': 1, 'role_id': 1}] doc
        res_ls = []
        for i in doc:
            role = models.Role.objects.get(id=i["role_id"])
            print(role, "role")  # Role object (1) role
            res_ls.append({
                "id": i["id"],
                "username": i["username"],
                "email": i["email"],
                "password": i["password"],
                "status": i["status"],
                "role_title": role.title,
                "role_permissions_menu": role.permissions.menu
            })
        print(res_ls, 'res_ls')  
        # [{'id': 1, 'username': 'admin', 'email': '13400405244@163.com', 'password': 'admin', 'status': 1, 'role_title': '超级管理员', 'role_permissions_menu': '["all_btn","all_router"]'}] res_ls
  # filter(**args]).values().first()
      doc = models.Users.objects.filter(email=body["email"]).values().first()
        print(doc)  
        # {'id': 1, 'username': 'admin', 'email': '13400405244@163.com', 'password': 'admin', 'status': 1, 'role_id': 1}
        role = models.Role.objects.get(id=doc["role_id"])
        print(role, "role")  # Role object (1) role
        data_dict = {
            "id": doc["id"],
            "username": doc["username"],
            "email": doc["email"],
            "password": doc["password"],
            "status": doc["status"],
            "role_title": role.title,
            "role_permissions_menu": role.permissions.menu
        }
        print(data_dict, 'data_dict')  
        # {'id': 1, 'username': 'admin', 'email': '13400405244@163.com', 'password': 'admin', 'status': 1, 'role_title': '超级管理员', 'role_permissions_menu': '["all_btn","all_router"]'} data_dict
  # all()
      doc = models.Users.objects.all()
        print(doc)  # <QuerySet [<Users: Users object (1)>]>
        data_dict = []  # 定义数组
        for i in doc:
            data_dict.append({  # 添加每一个对象
                "id": i.id,
                "username": i.username,
                "email": i.email,
                "password": i.password,
                "status": i.status,
                "role_title": i.role.title,  # 去关联的角色表查询角色名称
                "role_permissions_menu": i.role.permissions.menu  # 查询权限
            })
        print(data_dict, 'data_dict')
      # [{'id': 1, 'username': 'admin', 'email': '13400405244@163.com', 'password': 'admin', 'status': 1, 'role_title': '超级管理员', 'role_permissions_menu': '["all_btn","all_router"]'}] data_dict
相关文章
|
2月前
|
存储 JSON 关系型数据库
【干货满满】解密 API 数据解析:从 JSON 到数据库存储的完整流程
本文详解电商API开发中JSON数据解析与数据库存储的全流程,涵盖数据提取、清洗、转换及优化策略,结合Python实战代码与主流数据库方案,助开发者构建高效、可靠的数据处理管道。
|
18天前
|
人工智能 Java 关系型数据库
使用数据连接池进行数据库操作
使用数据连接池进行数据库操作
66 11
|
1月前
|
存储 数据管理 数据库
数据字典是什么?和数据库、数据仓库有什么关系?
在数据处理中,你是否常困惑于字段含义、指标计算或数据来源?数据字典正是解答这些问题的关键工具,它清晰定义数据的名称、类型、来源、计算方式等,服务于开发者、分析师和数据管理者。本文详解数据字典的定义、组成及其与数据库、数据仓库的关系,助你夯实数据基础。
数据字典是什么?和数据库、数据仓库有什么关系?
|
1月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
155 0
|
1月前
|
SQL 存储 数据库
Django模型查询与性能调优:告别N+1问题
本文详解Django数据库查询基础与优化技巧,涵盖QuerySet使用、关联查询(一对多/多对多)、N+1查询问题及解决方案(select_related、prefetch_related)、高级查询方法及项目实战中的数据权限控制实现。
119 0
|
3月前
|
存储 SQL Java
数据存储使用文件还是数据库,哪个更合适?
数据库和文件系统各有优劣:数据库读写性能较低、结构 rigid,但具备计算能力和数据一致性保障;文件系统灵活易管理、读写高效,但缺乏计算能力且无法保证一致性。针对仅需高效存储与灵活管理的场景,文件系统更优,但其计算短板可通过开源工具 SPL(Structured Process Language)弥补。SPL 提供独立计算语法及高性能文件格式(如集文件、组表),支持复杂计算与多源混合查询,甚至可替代数据仓库。此外,SPL 易集成、支持热切换,大幅提升开发运维效率,是后数据库时代文件存储的理想补充方案。
|
27天前
|
安全 关系型数据库 MySQL
MySQL安全最佳实践:保护你的数据库
本文深入探讨了MySQL数据库的安全防护体系,涵盖认证安全、访问控制、网络安全、数据加密、审计监控、备份恢复、操作系统安全、应急响应等多个方面。通过具体配置示例,为企业提供了一套全面的安全实践方案,帮助强化数据库安全,防止数据泄露和未授权访问,保障企业数据资产安全。
|
12天前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
51 3
|
18天前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
1月前
|
存储 运维 关系型数据库
从MySQL到云数据库,数据库迁移真的有必要吗?
本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。