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天前
|
数据管理 数据库 数据安全/隐私保护
Django—同一项目不同app使用不同数据库
在Django项目中实现不同app使用不同数据库的配置,可以通过配置多数据库、创建数据库路由和配置路由来实现。通过这种方法,可以有效地将数据隔离到不同的数据库,提高数据管理的灵活性和系统的可扩展性。希望本文能为开发者在Django项目中使用多数据库提供清晰的指导。
23 4
|
2月前
|
SQL 定位技术 数据库
深入探索Django ORM:高效数据库操作的秘诀####
本文旨在为读者揭开Django ORM(对象关系映射)的神秘面纱,通过一系列生动的比喻和详实的案例,深入浅出地讲解其核心概念、工作原理及高级特性。我们将一起探讨如何利用Django ORM简化数据库交互,提升开发效率,同时确保数据的一致性和安全性。不同于传统的技术文档,本文将以故事化的形式,带领读者在轻松愉快的氛围中掌握Django ORM的精髓。 ####
|
3月前
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
3月前
|
SQL 测试技术 数据库
|
4月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
156 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
4月前
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
130 0
|
4月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
5月前
|
数据库 Python
django中数据库外键可以自定义名称吗
django中数据库外键可以自定义名称吗
|
6月前
|
SQL 数据处理 数据库
|
6月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
704 0

热门文章

最新文章