将下面SQL语句通过sqlalchemy转换成orm语句实现:ELECT j.element, count(distinct b.requisition_no) as cnt FROM dws_v2_test.dws_biz_detail b JOIN dws_v2_test.dws_test_result p ON b.requisition_no=p.requisition_no JOIN JSON_TABLE(p.biok_category, '$[*]' columns (element varchar(50) path '$')) j WHERE b.tech_platform=:tech_platform AND b.prod_id=:prod_id and b.biz_type=:biz_type and b.report_status like '报告%' and b.report_result=:report_result and b.serv_id in :service_ids and j.element <> '' GROUP BY j.element;
时间: 2024-02-27 07:55:37 浏览: 210
假设你已经创建了SQLAlchemy的session对象,并且已经定义了对应的ORM模型类,可以使用如下代码实现上述SQL查询的ORM语句:
```python
from sqlalchemy import func
from sqlalchemy.orm import aliased
from models import BizDetail, TestResult
# 别名定义
j = aliased(func.json_table(TestResult.biok_category, '$[*]'), name='j')
b = aliased(BizDetail, name='b')
# ORM查询语句
query = session.query(j.element, func.count(func.distinct(b.requisition_no)).label('cnt'))
query = query.join(TestResult, TestResult.requisition_no == b.requisition_no)
query = query.join(j, j.columns.element != '')
query = query.filter(b.tech_platform == :tech_platform, b.prod_id == :prod_id, b.biz_type == :biz_type,
b.report_status.like('报告%'), b.report_result == :report_result,
b.serv_id.in_(service_ids))
query = query.group_by(j.element)
# 获取查询结果
result = query.all()
```
其中,`models`是你定义的ORM模型类文件,包括`BizDetail`和`TestResult`两个类,分别对应数据库中的`dws_biz_detail`和`dws_test_result`表。需要注意的是,`json_table`函数需要通过`func`对象引入,而`alias`函数则需要通过`orm`对象的`aliased`方法引入,并且需要指定别名。ORM查询语句的写法与SQL语句类似,但是需要使用ORM模型类的属性替代表名和字段名。最后使用`all()`方法获取查询结果。
阅读全文