Django3.2新增数据库函数-JsonObject的使用

简介: Django3.2新增数据库函数-JsonObject的使用

一、前言

最近在项目中有个接口需要将查询的数据中部分字段合并为一个字典再返回。


之前的做法要么是先通过ORM查出数据自己单独再做处理,要么是通过数据库函数Concat将这些字段拼接为一个Json字符串进行查询,后续再做处理。跟第一种的处理方法差不多,两个都很麻烦。


但在django3.2版本,它们新增了专门的数据库函数JsonObject来处理这种需求了。


二、JSONObject说明


获取键值对列表并返回包含这些对的 JSON 对象。

例如有如下表结构,表模型名称为Student:


student 表

字段 描述
id 学生id
name 学生名称
age 学生年龄
gender 学生性别
address 家庭地址


想查询学生信息,并将agegenderaddress合并为一个键名为info的json对象:

{
  "info": {
    "age": 16,
    "name": "张三",
    "address": "中国北京市"
  }
}


代码可以这样写:

from django.db.models import F
from django.db.models.functions import JSONObject
    stu_data = Student.objects.annotate(
        info=JSONObject(name=F('name'), age=F('age')), address=F('address')).values('info')


官方文档的例子:

9e045bfdc6774c318221ad28ac7f4eb8.png

三、特别说明


如果涉及多对多关系的话可能会出现类似的报错

8f081683c20e48d18932fba419d98fa1.png

网上的解决方案会让你将sql_mode的ONLY_FULL_GROUP_BY配置删掉

这样虽然不再报错了,但查询的数据会出现遗漏!(只会取多对多关联数据的第一条数据)

正确的做法是在查询的时候加上多对多的关联字段即可,这样就不会出现数据的遗漏了。


Django还有很多数据库函数供我们使用,当我们遇到类似的问题时,不妨先看看官方文档中:https://docs.djangoproject.com/en/3.2/ref/models/database-functions/ 是否有对应的数据库函数供我们使用,这样也避免了重复造轮子的过程。

目录
相关文章
|
2月前
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
1月前
|
SQL 定位技术 数据库
深入探索Django ORM:高效数据库操作的秘诀####
本文旨在为读者揭开Django ORM(对象关系映射)的神秘面纱,通过一系列生动的比喻和详实的案例,深入浅出地讲解其核心概念、工作原理及高级特性。我们将一起探讨如何利用Django ORM简化数据库交互,提升开发效率,同时确保数据的一致性和安全性。不同于传统的技术文档,本文将以故事化的形式,带领读者在轻松愉快的氛围中掌握Django ORM的精髓。 ####
|
2月前
|
SQL 测试技术 数据库
|
3月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
3月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
110 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
3月前
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
93 0
|
5月前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
345 7
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
5月前
|
存储 关系型数据库 MySQL
基于python django 医院管理系统,多用户功能,包括管理员、用户、医生,数据库MySQL
本文介绍了一个基于Python Django框架开发的医院管理系统,该系统设计了管理员、用户和医生三个角色,具备多用户功能,并使用MySQL数据库进行数据存储和管理。
202 4
基于python django 医院管理系统,多用户功能,包括管理员、用户、医生,数据库MySQL
|
4月前
|
数据库 Python
django中数据库外键可以自定义名称吗
django中数据库外键可以自定义名称吗