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/ 是否有对应的数据库函数供我们使用,这样也避免了重复造轮子的过程。

目录
相关文章
|
29天前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
26天前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
58 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
28天前
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
57 0
|
3月前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
232 7
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
2月前
|
数据库 Python
django中数据库外键可以自定义名称吗
django中数据库外键可以自定义名称吗
|
3月前
|
存储 关系型数据库 MySQL
基于python django 医院管理系统,多用户功能,包括管理员、用户、医生,数据库MySQL
本文介绍了一个基于Python Django框架开发的医院管理系统,该系统设计了管理员、用户和医生三个角色,具备多用户功能,并使用MySQL数据库进行数据存储和管理。
123 4
基于python django 医院管理系统,多用户功能,包括管理员、用户、医生,数据库MySQL
|
3月前
|
数据采集 前端开发 算法
基于朴素贝叶斯算法的新闻类型预测,django框架开发,前端bootstrap,有爬虫有数据库
本文介绍了一个基于Django框架和朴素贝叶斯算法开发的新闻类型预测系统,该系统具备用户登录注册、后台管理、数据展示、新闻分类分布分析、新闻数量排名和新闻标题预测等功能,旨在提高新闻处理效率和个性化推荐服务。
|
3月前
|
监控 数据可视化 前端开发
基于python django生产数据与计划大屏,可链接数据库
本文介绍了一个基于Python Django框架开发的生产数据与计划大屏系统,该系统能够实时采集和展示生产数据,支持数据可视化和实时更新,以提高生产监控的效率和质量。
|
3月前
|
SQL 数据处理 数据库
下一篇
无影云桌面