【发布时间】:2021-02-19 05:25:46
【问题描述】:
假设我有一个名为Table 的表,其中包含一个JSONB 字段data。其中一条记录(记录 1)存储有以下 JSON 对象:
{
"A": {},
"B": {}
}
另一条记录(记录 2)存储了以下 JSONB 对象:
{
"A": {},
"B": {},
"C": {}
}
我正在努力定义一种通过对data 字段中的键进行精确过滤来查找记录的方法。例如,我想在data字段中检索只有键“A”和“B”的记录,即记录1。
我已经尝试过 SQLAlchemy 的 JSONB 类型比较器 methods,例如 contains() 方法,但是在以下 Python 查询的情况下这将返回两条记录:
Session().query(Table).filter(Table.data.contains({"A": {}, "B": {}})).all()
是否可以使用可用的 SQLAlchemy 过滤器对(列表)键进行精确过滤?欢迎任何想法。非常感谢!
【问题讨论】:
-
这能回答你的问题吗? Flask SQLAlchemy query, specify column names
-
@sahasrara62 它们是不同的问题,所以很遗憾它没有回答我的问题。我正在寻找一种方法来检查 JSONB 字段中的键是否与键列表完全匹配。
-
所以你试图从存储在数据库中的数据对象(这里是 json )中过滤掉数据?我不认为你可以直接这样做,你需要先获取所有然后遍历它们并应用条件
-
不完全从数据对象 (jsonb) 中过滤掉数据,而是根据数据对象中的键过滤记录。所以基本上我正在寻找类似以下过滤功能的东西:
filter(Table.data.keys() == ['A', 'B'])。这不起作用,因为 JSONB 对象数据没有函数keys()
标签: python json postgresql sqlalchemy jsonb