首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLAlchemy:查询包含数组和计数匹配的JSON列(PostgreSQL)

SQLAlchemy:查询包含数组和计数匹配的JSON列(PostgreSQL)
EN

Stack Overflow用户
提问于 2021-05-18 09:14:04
回答 1查看 1.7K关注 0票数 3

我对SQLAlchemy有点陌生,在db中使用JSON列。

我的db模型

代码语言:javascript
复制
from sqlalchemy.dialects.postgresql import JSON
    
class Traydetails(db.Model):
    
    id= db.Column(db.Integer, autoincrement=True, primary_key=True)
    traynumber = db.Column(db.String, unique=True)
    safety_data = db.Column(JSON)

我的JSON结构

代码语言:javascript
复制
[{"Formulation": "Form1", "Hazard Rating": "Class B"}, {"Formulation": "Form2", "Hazard Rating": "Class B"}, {"Formulation": "Form3", "Hazard Rating": "Class B"}, {"Formulation": "Form4", "Hazard Rating": "Class B"}, {"Formulation": "Form5", "Hazard Rating": "Class B"}, {"Formulation": "Form6", "Hazard Rating": "Class B"}, {"Formulation": "Form7", "Hazard Rating": "Class B"}, {"Formulation": "Form8", "Hazard Rating": "Class B"}, {"Formulation": "Form9", "Hazard Rating": "Class B"}, {"Formulation": "Form10", "Hazard Rating": "Class B"}]

尝试了查询-1

代码语言:javascript
复制
hazard = Traydetails.query.filter(Traydetails.safety_data['Hazard Rating'].astext == "Class B").count()

它什么也不回。

尝试了查询-2

代码语言:javascript
复制
hazard = Traydetails.query.filter(Traydetails.safety_data[0]['Hazard Rating'].astext.cast(Unicode) == "Class B").count()

它只返回一个(因为我在比较一个位置)

但我的目标是数一数有多少B级在危险(钥匙)。注有不同类型的类,如A类、B类、N类。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-18 11:54:12

您可以使用postgres函数json_array_elements形成一个子查询,您可以筛选该子查询以检索Class B危险等级的计数:

代码语言:javascript
复制
from sqlalchemy import func
subq = session.query(func.json_array_elements(Traydetails.safety_data).label('safety_data')).subquery()

count = session.query(subq).filter(subq.c.safety_data.op('->>')('Hazard Rating') == 'Class B').count()
print(count)

filter使用子查询:subq.c.safety_data的safety_data标记列。对于.op,我们使用一个自定义操作符->>,它将把json转换为文本。有关运算符的更多信息,请参见医生们

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67583289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档