【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
相关文章
|
1月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
25天前
|
存储 监控 数据处理
flink 向doris 数据库写入数据时出现背压如何排查?
本文介绍了如何确定和解决Flink任务向Doris数据库写入数据时遇到的背压问题。首先通过Flink Web UI和性能指标监控识别背压,然后从Doris数据库性能、网络连接稳定性、Flink任务数据处理逻辑及资源配置等方面排查原因,并通过分析相关日志进一步定位问题。
157 61
|
18天前
|
SQL 定位技术 数据库
深入探索Django ORM:高效数据库操作的秘诀####
本文旨在为读者揭开Django ORM(对象关系映射)的神秘面纱,通过一系列生动的比喻和详实的案例,深入浅出地讲解其核心概念、工作原理及高级特性。我们将一起探讨如何利用Django ORM简化数据库交互,提升开发效率,同时确保数据的一致性和安全性。不同于传统的技术文档,本文将以故事化的形式,带领读者在轻松愉快的氛围中掌握Django ORM的精髓。 ####
|
1月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
135 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
23天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
1月前
|
SQL 监控 数据库
深入探索Django ORM:高效数据操作的秘诀与实践####
在当今的Web开发领域,提升数据访问层的效率是优化应用性能的关键。本文旨在通过剖析Django框架中的ORM(对象关系映射)机制,揭示其如何简化数据库交互,并探讨一系列高级技巧与策略,帮助开发者构建更高效、可维护的数据访问代码。我们不涉及安装步骤或基础概念,而是聚焦于实战经验分享,旨在为中高级开发者提供深度洞见。 ####
|
1月前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
SQL 缓存 API
django 1.8 官方文档翻译: 2-2-1 执行查询
执行查询 一旦你建立好数据模型之后,django会自动生成一套数据库抽象的API,可以让你执行增删改查的操作。这篇文档阐述了如何使用这些API。
852 0
|
1月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
169 45
|
1月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
59 2