DjangoORM JsonField查询
引用原文: Django ORM中原生JSONField的使用方法
Django最新版v3.1的主要更新之一便是完善了对JSON数据存储的支持,新增models.JSONField和forms.JSONField,可在所有受支持的数据库后端上使用,可在所有受支持的数据库后端上使用。
目前支持的数据库以及对应版本主要有
MariaDB 10.2.7+
,MySQL 5.7.8+
,Oracle
,PostgreSQL
和SQLite 3.9.0+
但个别Django的查询方法可能与部分数据库不兼容,例如contains和contained_by就不支持Oracle和SQLite数据库
JsonField使用
from django.db import models
class Hero(models.Model): name = models.CharField(max_length=200) data = models.JSONField(null=True) def __str__(self): return self.name
通过models.JSONField可指定此字段为存储类型为JSON格式。null=True表示此字段可以为空,这个NULL指的是SQL NULL,如果想存储为JsonNULL,则可以使用Value(‘null’)来实现
# 示例
Hero.objects.create(name='coffee', data=Value('null'))
SQL NULL与JsonNULL的区别主要在is_null的查询上不同,可以通过以下这个示例来理解下
from django.db.models import Value
Hero.objects.create(name='ops')#<Hero: ops>>>>
Hero.objects.create(name='coffee', data=Value('null')) #<Hero: coffee>>>>>>>
Hero.objects.filter(data=None)#<QuerySet [<Hero: coffee>]
Hero.objects.filter(data=Value('null'))#<QuerySet [<Hero: coffee>]
Hero.objects.get(name='ops').data
Hero.objects.get(name='coffee').data
Hero.objects.filter(data__isnull=True) #<QuerySet [<Hero: ops>]
Hero.objects.filter(data__isnull=False) #<QuerySet [<Hero: coffee>]>
JsonField查询
在字段和字段内的值间使用双下划线进行层级连接表示
# 插入数据
Hero.objects.create(name='ops-coffee.cn', data={ 'age': 12,'group': {'name': 'ow1','skill': [{'name': 'swim', 'rank': 'A+'},{'name': 'shot', 'rank': None}]}})
Hero.objects.create(name='ops-coffee', data={'age':16}) #<Hero: ops-coffee>
查询 当想要查询age为12的数据时可以这样查询
# 注意data字段中age条件的查询方法为 "data__age",用的是双下划线,
Hero.objects.filter(data__age=12)<QuerySet [<Hero: ops-coffee.cn>]>
当想要查询group的name为ow1的数据时可以这样查询
# 在字段层级之间使用双下划线进行连接表示
Hero.objects.filter(data__group__name='ow1')<QuerySet [<Hero: ops-coffee.cn>]>
DjangoORM JsonField查询相关推荐
- Django ORM中原生JSONField的使用方法
带你尝鲜Django最新版重要更新JSONField的使用 Django最新版v3.1的主要更新之一便是完善了对JSON数据存储的支持,新增models.JSONField和forms.JSONFie ...
- 知识点old1908
队列中... linux-安装mysql-rpm方式 - pyhui的python全栈技术博客 - CSDN博客 https://blog.csdn.net/ifubing/article/detai ...
- 数据结构与算法(C语言)
第一章: 数据结构绪论 1.什么是程序:程序 = 数据结构 + 算法 2.逻辑结构&物理结构的区别用法 基本的目标就是将数据及其逻辑关系存储到计算机的内存中 一:逻辑结构: 逻辑结构是指数据对 ...
- django-orm查询-验证是否存在的方式
查询一个数据的多个方法 >get方式查询 如果查询不到结果, DoesNotExist: 或者 查询的结果超过一个, MultipleObjectsReturned: 都会报错 >filt ...
- django-orm查询功能词
小结 利用条件查询的使用格式 ? 模型类.objects.filter(字段__查询功能=值)等于 ? exact包含 ? contains以某某开头 ? startswith以某某结尾 ? ends ...
- 来自于DjangoORM查询的蜜汁bug
RelatedObjectDoesNotExist:XXX has no xxx 今天遇到了一个蜜汁bug如下:ChainToNode是我的一个多对多关系的中间表 有着两个外键字段,其中一个叫node ...
- django查询集-17
当查询结果是多个的时候,django-ORM会返回一个 查询集(QuerySet) ,表示从数据库中获取对象的 集合 . 查询集可以使用过滤器进行再次处理. 例如查询阅读量大于20且评论数大于30的书 ...
- DjangoORM框架
DjangoORM框架 文章目录 DjangoORM框架 一.ORM框架 1.ORM简介 2.使用django进行数据库开发的步骤如下: 3.定义模型类 4.迁移 5.数据操作 5.对象的关联操作 6 ...
- 日期类型前后台传递格式控制注解@DateTimeFormat@JsonFormat@JSONField
开发中经常遇到的日期字符串转换为Date的情况,在此记录一下. 后台接收前台传递的日期数据,在对应的参数Bean的Date属性字段上使用@DateTimeFormat(pattern="yy ...
最新文章
- CICC科普栏目丨时间之箭:从熵到大爆炸再到万物理论(一)
- 数据运算,条件测试,if选择结构
- node.js mysql 不退出,mysql - 错误:使用NodeJS在MySQL中调用退出后无法排队查询 - SO中文参考 - www.soinside.com...
- 面试题:如何编写一个杯子测试用例
- css_oneday
- php node 目录,node.js基于fs模块对系统文件及目录进行读写操作的方法详解
- QT QTransform与QMatrix 有啥区别?
- python引入模块教程_python导入模块--案例
- zynq开发系列6:创建AXI IP实现PS对PL的数据配置(步骤三配置SDK)
- CRLF对GIT DIFF的影响
- 如何解决笔记本键盘突然失灵的问题
- 百度地图线路查询路线样式自定义
- win7台式计算机型号怎么查,教您电脑主板型号怎么看
- 我国期货市场发展潜力和方向
- 起步 —— 种一棵树最好的时间是十年前
- 2022年海外有哪些直播带货平台?直播带货要怎么做?
- nginx报错:src/core/ngx_murmurhash.c:39:11: error: this statement may fall through [-Werror=implicit-fa
- OA 系统与 ERP 的关系,两者是如何对接集成的?
- 基于canoe 新建一个lin工程_基于CANoe的车身控制器CAN/LIN网络设计方法
- SQL Server 2008 R2 下载 iso
热门文章
- Flutter中编解码Convert基本使用
- 界面让table居中的办法
- 签到APP:android入门级小项目,Node.js 提供服务端接口。
- Python 爬取 42 年高考数据,告诉你高考为什么这么
- ENJ2005-C功率器件图示系统
- 1-1-01-电商数据建模
- latext插入双栏图片定位问题
- java题兔子第三个月生_【Java】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每...
- SQL中add添加列语句
- 黑帽SEO之暗链方法大全,那种最好,不易被蜘蛛搜索引擎察觉