首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

包含嵌套数据的JSONField上的Django查询集,因此字典键在键名中有连字符

在Django中,JSONField是一种用于存储和查询JSON数据的字段类型。当JSONField用于存储包含嵌套数据的JSON对象时,可以使用Django查询集来进行查询操作。

在查询集中,如果字典键在键名中有连字符,可以使用双下划线(__)来表示键的层级关系。下面是一个示例:

假设有一个JSONField字段名为data,存储了以下JSON数据:

{ "user-info": { "name": "John", "age": 25, "address": { "city": "New York", "country": "USA" } } }

要查询该字段中的"user-info"下的"name"键的值,可以使用以下代码:

代码语言:txt
复制
from django.db.models import F

result = MyModel.objects.filter(data__user_info__name='John')

这将返回一个查询集,其中包含满足条件的对象。

对于包含嵌套数据的JSONField,可以根据具体的业务需求进行更复杂的查询操作。使用双下划线可以表示不同层级的键,从而实现对嵌套数据的查询。

关于腾讯云相关产品,推荐使用腾讯云的云数据库CDB来存储和查询JSON数据。云数据库CDB是一种高性能、可扩展的关系型数据库,支持JSON数据类型和JSON函数,可以方便地进行JSON数据的存储和查询。您可以通过以下链接了解更多关于腾讯云云数据库CDB的信息:

腾讯云云数据库CDB

请注意,以上答案仅供参考,具体的解决方案可能因实际情况而异。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django JSONField SQL注入漏洞(CVE-2019-14234)分析与影响

Django中也支持了Postgresql数据类型: JSONField ArrayField HStoreField 这三种数据类型因为都是非标量,且都能用JSON来表示,我下文就用JSONField...).all() JSONField强大让我们能灵活地关系型数据库与非关系型数据库间轻松地切换,因此我们很多业务中都会使用到这个功能。...那么,JSONField中,lookup实际是没有变,但是transform从“在外表中查找”,变成了“JSON对象中查找”,所以自然需要重写get_transform函数。...根据上面的分析可知,transform是生成SQL查询中“键名部分,那么如果我们控制了queryset查询键名,即可注入任意SQL语句了。...原因是,Django-Admin中就支持用户控制queryset查询键名,我2017年微博中说到过这一点,不过当时没有测过JSONField,sad。 ?

2.1K32

CVE-2019-14234:Django JSONField SQL注入漏洞复现

而且Django包含许多功能强大第三方插件,使得Django具有较强可扩展性。...0x01 漏洞概述 ---- 该漏洞需要开发者使用了JSONField/HStoreField,且用户可控queryset查询键名键名位置注入SQL语句。...Django通常搭配postgresql数据库,而JSONField是该数据一种数据类型。...该漏洞出现原因在于DjangoJSONField实现,Djangomodel最本质作用是生成SQL语句,而在Django通过JSONField生成sql语句时,是通过简单字符串拼接。...0x04 漏洞利用 ---- 通过对代码分析,可以知道如果在你Django中使用了JSONField并且查询键名”可控,就可以进行SQL注入 访问http://ip:8000/admin 输入用户名

2.4K00
  • CVE-2024-42005|Django SQL注入漏洞

    0x00 前言 Django是一个高级Python Web框架,可以快速开发安全和可维护网站。...由经验丰富开发者构建,Django负责处理网站开发中麻烦部分,可以专注于编写应用程序,而无需重新开发。它是免费和开源,有活跃繁荣社区,丰富文档,以及很多免费和付费解决方案。...0x01 漏洞描述 当使用 QuerySet.values() 或 values_list() 方法从数据库中提取数据,并且模型中包含JSONField 字段类型时,威胁者可以通过传递特制JSON 对象...(这些键名在生成 SQL 查询中可能会被用作列别名)作为参数(*args)执行SQL 注入攻击,成功利用该漏洞可能导致执行任意SQL 命令,从而访问、修改或删除数据库中数据。...0x02 CVE编号 CVE-2024-42005 0x03 影响版本 5.0 <= Django < 5.0.8 4.2 <= Django < 4.2.15 0x04 漏洞详情 https://www.djangoproject.com

    24210

    Django漏洞系列

    产生该漏洞原因是重复创建具有Unique约束值导致出发数据库Unique异常,并且没有对用户输入字符进行检查与转义。...Django JSONField/HStoreField SQL注入漏洞 漏洞编号:CVE-2019-14234 开发者Django中使用了JSONField/HStoreField,且用户可控queryset...查询键名键名位置注入SQL语句。...Django 3.0.3版本以下GIS查询功能模块(GPS定位相关模块)中存在SQL注入漏洞,其产生漏洞原因是GIS聚合查询功能中,用户oracle数据库且可控tolerance变量,并且要命是未对该变量做任何用户输入检查...与MySQL不同是,MySQL中查询语句可以直接是:select 1,2,但是Oracle中就必须跟一个表名,如下:select * from dual rownum=1:限制查询返回总行数为一条

    3.1K40

    Django 2.0 新特性 转

    2.admin后台对移动端更加友好 Django最受大家欢迎admin后台,具有响应式特性,支持主流移动设备。 3.Window 表达式 新Window表达式允许为查询添加一个OVER从句。...4.小特性 django.contrib.admin后台 新ModelAdmin.autocomplete_fields属性和ModelAdmin.get_autocomplete_fields()方法现在可以在外和多对多字段使用...现在支持fastupdate和gin_pending_list_limit参数; 新GistIndex类允许在数据库中创建GiST索引; inspectdb现在可以内省JSONField和RangeFields...()方法返回字典类型表单错误,以适应JSON类型x响应; Generic Views通用视图 新ContextMixin.extra_context属性允许View.as_view()中添加上下文...QuerySet.reverse()和last()不能用于切片后查询 对切片后查询使用反转和获取最近对象操作将弹出异常,如下所示: >>> Model.objects.all()[:2].reverse

    2.6K20

    Django相关知识点回顾

    (get或者post请求方式都可以带查询字符串),即假使客户端进行POST方式请求,依然可以通过request.GET获取请求中查询字符数据。...中request请求对象属性 Django中request请求对象属性 说明 args GET 查询字符串参数 form POST 请求体中表单数据 data body 请求体中原始bytes数据...无论是字典、列表或者元组元素,都需要使用 .取值,下标或者键名,不能使用 [],这是和Flask有区别的地方。...QuerySet(查询) exclude 查询条件 返回不满足条件所有数据 QuerySet(查询) order_by 排序字段 对查询结果进行排序 QuerySet(查询) aggregate...查询结果缓存 使用同一个查询时,只有第一次使用查询时会进行数据查询操作,然后Django框架就会把查询结果存起来,下一次再使用这个查询时,使用Django之前存储结果。

    10K51

    【愚公系列】2022年04月 Python教学课程 74-DRF框架之过滤

    4.3 嵌套查找 4.4 参数说明 4.5 自定义过滤器 一、普通过滤 REST 框架通用列表视图默认行为是返回模型管理器整个查询。...通常,您希望 API 限制查询返回项目。 筛选子类任何视图查询最简单方法是重写该方法。...筛选初始查询最后一个示例是根据 url 中查询参数确定初始查询。...对于 JSONField 和 HStoreField 字段,您可以使用相同双下划线表示法根据数据结构中嵌套值进行查找: search_fields = ['data__breed', 'data_...搜索参数可能包含多个搜索词,这些搜索词应以空格和/或逗号分隔。如果使用多个搜索词,则仅当所有提供词都匹配时,才会在列表中返回对象。 搜索行为可能会因在 前面加上各种字符而受到限制。

    2.5K30

    Python爬虫之非关系型数据库存储#5

    对于爬虫数据存储来说,一条数据可能存在某些字段提取失败而缺失情况,而且数据可能随时调整。另外,数据之间还存在嵌套关系。...id 集合: [ObjectId('5932a80115c2606a59e8a048'), ObjectId('5932a80115c2606a59e8a049')] 实际 PyMongo 3....如果要查询年龄大于 20 数据,则写法如下: results = collection.find({'age': {'$gt': 20}}) 这里查询条件键值已经不是单纯数字了,而是一个字典,其键名为比较符号...Mike 字符串 $where 高级条件查询 {'$where': 'obj.fans_count == obj.follows_count'} 自身粉丝数等于关注数 关于这些操作更详细用法,可以...tags 集合和键名为 tags2 集合并将其保存为 inttag 3 sdiff(keys, *args) 返回所有给定集合 keys:键名序列 redis.sdiff(['tags

    12610

    【python系统学习07】一张图看懂字典并学会操作

    其中,字典键名必须是字符串类型,而键名所对应值可以是任何类型字典长啥样 说了这么多,字典到底啥样?...揭开神秘面纱: 语法伪代码 列表变量名 = { '字符键名key1': 对应key1值value1, '字符键名key2': 对应key2值value2, ......键名字符串 即键名必须用引号包裹,否则就会报错 错误类型:NameError,变量未定义错误 键名是需要唯一不重复 如上,dictName中,只能有一个"age" 若有多个同名,只保留最后一个...只需要在提取基础赋值即可。 ⚠️但可能需要注意,如果键名字典中已经存在,再这么操作就会直接修改这个值。...:除基本数据类型外,列表可嵌套其他列表和字典字典也可嵌套其他字典和列表。

    1.3K10

    Django请求和响应对象

    Django请求和响应对象 Django 使用请求和响应对象系统中传递状态。 当一个页面被请求时,Django 会创建一个 HttpRequest 对象,这个对象包含了请求数据。...HttpRequest.POST 一个类似字典对象,包含所有给定 HTTP POST 参数,前提是请求包含表单数据。...和值是字符串。 HttpRequest.FILES 一个类似字典对象,包含所有上传文件。FILES 中每个是 中 name。...请求中任何 HTTP 头都会被转换为 META ,方法是将所有字符转换为大写字母,用下划线代替任何字符,并在名称前加上 HTTP_` 前缀。...QueryDict对象 一个 HttpRequest 对象中, GET 和 POST 属性是 django.http.QueryDict 实例,这是一个类似字典类,用来处理同一个多个值。

    1.5K20

    重点内容回顾-DRF

    django.db.models中包含了可选常量,常用有三种: a.CASCADE级联,删除主表数据时候,连同删除外表中数据。这个就有点狠了,按需求慎用。...5.4.3序列化功能 将实例对象转换为字典数据: a.序列化单个对象。 b.序列化多个对象。(其实就是序列化单个对象基础多加了一个参数many=True) c.关联对象嵌套序列化。...request.data保存是解析之后请求体数据,并且已经解析成了字典或类字典,相当于包含Django原始request对象中request.body/request.POST/request.FILES...request.query_params保存解析之后查询字符数据,并且已经解析成了字典或类字典,相当Django原始request对象中request.GET 2.响应时可以统一返回Response...4.高级功能:认证、权限、限流 5.5.2.2GenericAPIView 是APIView子类,APIView基础添加操作序列化器和数据查询方法。

    2.4K20

    都是微服务天下了,还有不知道 JSON 程序员吗?

    不同语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有列表(keyed list),或者关联数组 (...这些结构可以嵌套。 ? 1.2.4 字符串   字符串(string)是由双引号包围任意数量 Unicode 字符集合,使用反斜线转义。...1.3 Java 中 JSON   Java 中并没有内置 JSON 解析,因此使用 JSON 需要借助第三方类库。...若为作用在 set/get 方法,反序列化时不会赋值给属性 format 用在 Date 类型字段来格式化时间格式 serialize、deserialize 布尔类型, 序列化时候就不包含这个字段了...1.4.1 获取数据 ☞ 单个数据 json对象.键名; json对象["键名"]; ☞ 遍历 for(var key in json对象) { // TODO } 1.4.2 JS 内置方法 方法

    4.5K20

    python(三)

    ,和字符串一样,是不能在原来数据做删除操作,我们可以将其类型进行转换,将其修改好之后,再转换成元组类型就可以了。      ...元组支持嵌套,可以包含列表。字典和不同元组。       ...@字典创建和使用      字典组成:字典是由大括号{  }来包含数据,大括号里面包含和其对应值,一个对应一个值或者一个空项,和值使用冒号隔开,项和项之间用逗号隔开,空字典就是不包含任何项大括号...,字典必须是不可变数据类型,如果用元组做,你必须要保证元组内对象也是不可变类型,可变数据类型对象不能做。     ...>>>变量名[键名]       值      @ 字典添加方法:      字典添加方法和列表有所不同:        字典变量名[新添加键名] = 新对应值      @ 字典值修改方法

    47700

    Django rest_framework实现增删改查接口

    目录 Django rest_framework实现增删改查接口 写接口前知识准备 __all__使用方法 序列化类配置 Response二次封装 表深度查询 单查群查接口 单删群删接口 单增,群增接口...由于该模块包含了 __all__ 变量,因此该语句只导入 __all__ 变量所列出成员。...depth = 1 值代表深度次数,深度查询指的是当一张表有关联表时,查询查自己表时顺便将关联内容也查出来,如果被深度查询采用__all__,会将所关联表所有字段都查出来。...表深度查询方式有三种: 第一种:子序列化:必须有子序列化类配合,不能反向查询 第二种:配置depth:自动深度查询是关联表所有字段,数据量太多 第三种:插拔式@property:名字不能与外键名同名..., }#return出我们需要查询出来第二张表字段和数据,前提方法名不能和外字段名重名 然后序列化类BookModelSerializer中metafields属性中添加上面定义方法名

    2.3K20

    Django---ORM操作大全

    ,如果数据库迁移,只需要更换Django数据库引擎即可; 一、Django连接MySQL 1、创建数据库 (注意设置 数据字符编码) 由于Django自带orm是data_first类型ORM,...URL/Email/IP/ 但是mysql数据没有这些类型,这类型存储到数据本质是字符数据类型,其主要目的是为了封装底层SQL语句; 1、字符串类(以下都是在数据库中本质都是字符数据类型,此类字段只是...1、无需查询性能低,省硬盘空间(选项不固定时用外) 2、modle文件里不能动态增加(选项一成不变用Djangochoice) 其他字段 db_index = True 表示设置索引 unique...(一列),代表B表多个(一行)称为1对多, 查询 总结:利用orm获取 数据库表中多个数据 获取到数据类型本质都是 queryset类型, 类似于列表, 内部有3种表现形式(对象,字典,列表) modle...aggregate()中每一个参数都指定一个包含字典返回值。即在查询生成聚合。

    6.9K100

    06.Django基础五之django模型层(二)多表操作

    一 创建模型 表和表之间关系     一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外约束和不加外约束区别,一对一约束是一对多约束加上唯一约束...注意事项: 表名称myapp_modelName,是根据 模型中数据自动生成,也可以覆写为别的名称   id 字段是自动添加 对于外字段,Django 会在字段名添加"_id" 来创建数据库中列名...四 基于双下划线跨表查询(基于join实现Django 还提供了一种直观而高效方式查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系。...,意思是说,它返回一个包含一些键值对字典。...当一个操作符两个Q 对象使用时,它产生一个新Q 对象。

    2.7K20

    Django 基础快速入门

    保存后刷新页面显示如下: 6.3 字典取值 字典直接取值 之前所给与数据中,有一个字典数据还未取到,字典数据使用传到目标的某一个键名加上对应点运算符 “.”...for 循环取值 在对字典取值时还可以使用 for 循环取值(键名)。... Django 前端模板语法中,一个字典键名有一个 keys 属性,通过 for 循环对这个属性进行遍历即可渠道所有的键名: keys 键名: {% for key in uinfo.keys...若想删除某个,只需要删除该行代码即可。...,此时创建这个列数据需要存在于那个表指定列 id 中有值在生成 depart时将会生成 depart_id 表示指向某一个表列名 # on_delete 表示删除对应关联表内容时,自动删除所关联对应内容

    1.7K20

    【Python】从基础变量类型到各种容器(列表、字典、元组、集合、字符串)

    # 查询 data = 列表名 # 传递列表地址 data = 列表名[0] # 传递第0位数据地址 data = 列表名[:2] # 传递一个新列表地址,新列表内包含原列表前两个变量存地址...# 遍历字典: for 键名 in 字典名: # 遍历字典字典名[键名] for 值名 in 字典名.values(): # 遍历字典值 值名 for 键名,值名...所以索引时候相较于其他容器,字典是 最快。 列表适合储存单一维度数据,当我们要存储多维度数据时,我们可以使用字典。...= s2 # False 编码 容器中数据是不可变。因为原有基础修改,有可能破坏其他数据内存空间。变量可以变化其中指向信息,原因是地址是固定长度,不会干扰相邻数据。...Unicode字符:国际统一编码,旧字符每个字符2字节,新字符4字节。 UTF-8编码:Unicode存储与传输方式,英文1字节,中文3字节。

    2.2K20

    解锁 Python 嵌套字典奥秘:高效操作与实战应用指南

    字典必须是唯一,而值则可以是任何数据类型,包括数字、字符串、列表、元组甚至是另一个字典。这种灵活性使得字典成为处理复杂数据结构强大工具。...查找速度快:字典内部使用哈希表实现,因此查找、插入、删除键值对时非常高效,时间复杂度接近 O(1)。...= person.get("age", "Key not found") print(age) # 输出: 30 2.3 添加或修改键值对 字典是可变数据结构,因此你可以向字典中添加新键值对,或者修改已有值...6.4 数据库记录映射 在数据库操作中,字典也被广泛用于将查询结果映射为 Python 对象。通常,每行记录可以表示为一个字典,其中列名作为,列值作为字典值。...这种方法可以让开发者通过字典键名来访问数据库记录,提高代码可读性。 七、字典性能及其内部实现 Python 字典作为一种映射类型数据结构,其高效性得益于它底层实现:哈希表。

    10410
    领券