query

async AsyncDimension.query(expression, fields=None, as_model=True, role=None, role_name=None, role_group=None, multi_entity_config=None)

查询成员

根据维度表达式查询维度成员

参数
  • expression (str) – 维度表达式

  • fields (Union[List[str], Tuple[str], None]) – 需要查询的字段

  • as_model (bool) – 是否把返回的结果转化为pydantic model

  • role (Union[RoleStrategy, str, None]) – 权限方案元素对象或权限方案名,提供时将带权限方案信息查询

  • role_name (Optional[str]) – 角色名,默认为当前用户的角色信息

  • role_group (Optional[str]) – 角色组名,默认为当前用户的角色信息

  • multi_entity_config (Optional[List[Dict]]) – 实体维度配置表过滤条件

重要

  • expression 可以不包含维度名,即: 如果当前维度是Entity, Entity{Base(#root,0)}Base(#root,0) 是等价的。

  • 为保证接口正常调用, fields 将自动包含 name 属性。

  • as_model 参数可以影响本方法的返回类型,可以根据使用需要指定。

示例

如果希望将查询出的成员作为对象操作,推荐使用默认参数查询:

dim = Dimension('dim_example')
mbrs = dim.query('Base(#root,0)', fields=['ud1'])
mbr = mbrs[0]
ud1 = mbr.ud1
name = mbr.name
...

注意:未查询的属性也能访问,但值固定是None

assert mbrs.ud2 is None

可以把上述查询结果转换为dataframe:

data = (mbr.dict(exclude_unset=True) for mbr in mbrs)
df = pd.DataFrame(data=data)

注意需要参数 exclude_unset=True 排除未查询到的数据。

如果希望把查询数据转换为dataframe,更推荐使用以下方式:

dim = Dimension('dim_example')
mbrs = dim.query('Base(#root,0)', fields=['ud1'], as_model=False)
# 注意此时返回的数据类型不同
assert isinstance(mbrs, List[dict])
df = pd.DataFrame(data=mbrs)

如果希望带权限方案查询,可用 rolerole_name 以及 role_group 参数表示权限方案信息

dim = Dimension('component')
mbrs = dim.query('Descendant(East,0)', role='test_role', role_name='nonsense')

此时会以权限方案test_role中的nonsense角色作为查询的角色信息,查询维度表达式:component{Descendant(East,0)}

注意:role_name和role_group若提供,则提供其一即可

返回类型

Union[List[DimensionMemberBean], List[Dict[str, Any]], List[MultiEntityConfigResult]]

返回

  • 如果 as_model == True, 返回 List[DimensionMemberBean] 类型, 不在查询fields中的属性将会被设置为None。

  • 如果 as_model == False,返回 List[Dict[str, Any]] 类型, 内部的字典将不包含未查询的属性