【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月前
|
SQL 安全 数据库
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
141 77
|
1月前
|
数据采集 数据库 Python
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
144 75
|
30天前
|
数据管理 数据库 数据安全/隐私保护
Django—同一项目不同app使用不同数据库
在Django项目中实现不同app使用不同数据库的配置,可以通过配置多数据库、创建数据库路由和配置路由来实现。通过这种方法,可以有效地将数据隔离到不同的数据库,提高数据管理的灵活性和系统的可扩展性。希望本文能为开发者在Django项目中使用多数据库提供清晰的指导。
23 4
|
2月前
|
SQL 存储 运维
从建模到运维:联犀如何完美融入时序数据库 TDengine 实现物联网数据流畅管理
本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品。文章从一个具体的业务场景出发,分析了企业在面对海量时序数据时的挑战,并提出了利用 TDengine 高效处理和存储数据的方法,帮助企业解决在数据采集、存储、分析等方面的痛点。通过这篇文章,作者不仅展示了自己对数据处理技术的理解,还进一步阐释了时序数据库在行业中的潜力与应用价值,为读者提供了很多实际的操作思路和技术选型的参考。
56 1
|
2月前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
2月前
|
前端开发 JavaScript 数据库
获取数据库中字段的数据作为下拉框选项
获取数据库中字段的数据作为下拉框选项
68 5
|
2月前
|
SQL 定位技术 数据库
深入探索Django ORM:高效数据库操作的秘诀####
本文旨在为读者揭开Django ORM(对象关系映射)的神秘面纱,通过一系列生动的比喻和详实的案例,深入浅出地讲解其核心概念、工作原理及高级特性。我们将一起探讨如何利用Django ORM简化数据库交互,提升开发效率,同时确保数据的一致性和安全性。不同于传统的技术文档,本文将以故事化的形式,带领读者在轻松愉快的氛围中掌握Django ORM的精髓。 ####
|
27天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
13天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
95 42
|
4天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
51 25

热门文章

最新文章