获取数据库数据资料

今天主要是在搭建环境上耗费了一天的时间, 还没搭建完, 任然报错, o(╥﹏╥)o,

访问通过链接访问数据库的数据

1 设置配置文件

from dynaconf import Dynaconf

settings = Dynaconf(
    envvar_prefix="WID",
    settings_files=['settings.yaml'])

1.1 Dynaconf

pip install dynaconf

Dynaconf 是一个Python的第三方模块,旨在成为在 Python 中管理配置的最佳选择。

  • 它可以从各种来源读取设置,包括环境变量、文件、服务器配置等。
  • 它适用于任何类型的 Python 程序,包括 Flask 和 Django 扩展。
  • 定义setting 的配置文件

1.2 YAML详解 (配置文件)

  • 以.yml格式为后缀

  • 键值对使用冒号结构表示 key: value,冒号后面要加一个空格kubernetes

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释

2 定义函数

client = WidClient(grpc_target=settings.grpc_target, wid_org_id=settings.org_id)

3 定义 widclient 类

class WidClient:
    def __init__(self, grpc_target: str, wid_org_id: str):
        self.grpc_target = grpc_target   # 网址
        self._org_id = wid_org_id        # 编号

        self._channel = grpc.insecure_channel(grpc_target)   # grpc.insecure_channel  # 监听频道
        self._RpcMetricApiStub = RpcMetricApiStub(self._channel)    # 频次记录
        self._RpcTimeseriesApiStub = RpcTimeseriesApiStub(self._channel)    # 时间记录
        self._RpcFileApiStub = RpcFileApiStub(self._channel)     # 文件记录

        self._rpc_ts_api = TsQueryApi(wid_org_id, self._RpcMetricApiStub, self._RpcTimeseriesApiStub)   # Rpc获取所有监听的数值
        self._rpc_swmm_api = SwmmApi(wid_org_id, RpcWmSwmmApiStub(self._channel))      # 数据库文件的读取和保存
        self._file_api = FileApi(org_id=wid_org_id, file_stub=self._RpcFileApiStub)    # 中台文件大的读取和存储
        self._rpc_advmodel_api = AdvModelApi(wid_org_id,                    # 返回高级 算法/模型 相关操作的api
                                             adv_model_stub=RpcAdvModelApiStub(self._channel),
                                             input_stub=RpcAdvModelInputApiStub(self._channel),
                                             output_stub=RpcAdvModelOutputApiStub(self._channel),
                                             file_api=self._file_api,
                                             rpc_ts_query_api=self._rpc_ts_api)

    def swmm_api(self) -> SwmmApi:
        """
        返回swmm相关操作的api
        :return:
        """
        return self._rpc_swmm_api

    def advmodel_api(self) -> AdvModelApi:
        """
        返回高级 算法/模型 相关操作的api
        :return:
        """
        return self._rpc_advmodel_api

    def ts_api(self) -> TsQueryApi:
        """
        返回高级 算法/模型 相关操作的api
        :return:
        """
        return self._rpc_ts_api

    def metric_query(self,
                     metric_name: str = None,
                     gateway_tag_name: str = None,
                     business_types: list[str] = [],
                     metric_table_ids: list[str] = [],
                     metric_source_types: list[str] = [],
                     metric_types: list[str] = [],
                     metric_table_types: list[str] = [],
                     gateway_tag_names: list[str] = [],
                     metric_ids: list[str] = []) -> list[dict]:
        """

        查询指标信息,如果所有参数都留空,那么回返回系统中的所有的指标信息

        :param metric_name: 指标名称,支持模糊查询
        :param gateway_tag_name: 模糊查询,网关上传的点位tagId,用于是网关出,指标的唯一标识
        :param business_types: 指标的业务类型
        :param metric_table_ids: 指标所属的站点
        :param metric_source_types: 指标的数据源类型,raw为原始数据,processed为虚拟指标
        :param metric_types: 信号类型, DI(数字输入)、DO(数字输出)、AI(模拟输入)、AO(模拟输出)、DA(报警)、T(阈值)
        :param metric_table_types: 通过指标所属站点的类型,来查询所属指标类型
        :param gateway_tag_names: 指标在网关上指定的tagId
        :param metric_ids: 指标id
        :return: 指标信息的dict
        """

        return self._rpc_ts_api.metric_query(metric_name, gateway_tag_name, business_types, metric_table_ids,
                                             metric_source_types, metric_types, metric_table_types, gateway_tag_names,
                                             metric_ids)

    def query_ts_data(self,
                      from_time: datetime,
                      to_time: datetime = datetime.now(),
                      timeseries_name: list[str] = [],
                      down_sampling: RpcDownSampling = None,
                      result_tz: Union[str, pytz.timezone, dateutil.tz.tzfile] = None,
                      tags: dict[str, str] = None) -> Iterable[TsResp]:
        """
        :param from_time: 开始时间
        :param to_time: 结束时间
        :param timeseries_name: 时间序列名,注意这里不是tag_id
        :param down_sampling: 降采样参数
        :param result_tz: 结果的时区信息,不设置默认为utc时间
        :param tags:
        :return: 返回查询的数据,会yield返回
        """
        return self._rpc_ts_api.query_ts_data(from_time, to_time, timeseries_name, down_sampling, result_tz, tags)

    def query_scada_bind_file(self, scada_json_file: str,
                              from_time: datetime,
                              to_time: datetime = datetime.now(),
                              down_sampling: RpcDownSampling = None,
                              result_tz: Union[str, pytz.timezone, dateutil.tz.tzfile] = None) -> dict:
        return self._rpc_ts_api.query_scada_bind_file(scada_json_file, from_time, to_time, down_sampling, result_tz)


 

猜你喜欢

转载自blog.csdn.net/March_A/article/details/129847068