#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2023/4/8 9:05 # @Author : old tom # @File : metadata_reader.py # @Project : futool-tiny-datahub # @Desc : 元数据读取 import abc from configparser import ConfigParser from datahub.datasource.constant import ds_conf_param from datahub.datasource.datasource_manage import DataSource, DataSourceManage from datahub.metadata.metadatadao.metadata_dao import MetadataDao from common.fudb.connectors.connector_factory import ConnFactory reader_conf = ConfigParser() reader_conf.read('./reader_conf.ini') class AbsMetadataReader(metaclass=abc.ABCMeta): """ 抽象元数据读取器 """ def __init__(self, datasource): self.datasource = datasource @abc.abstractmethod def query_tables(self): """ 查询当前连接下所有表 :return: """ pass @abc.abstractmethod def query_views(self): """ 查询当前连接下所有视图 :return: """ pass @abc.abstractmethod def query_procedure(self): """ 查询当前连接下所有存储过程 :return: """ pass @abc.abstractmethod def query_table_fields(self, table): """ 查询字段 :param table: :return: """ pass class MetadataReader(AbsMetadataReader): def __init__(self, datasource: DataSource): super().__init__(datasource) self.db_type = datasource.connector.db_type self.dao = MetadataDao(datasource.connector) def query_tables(self): return self.dao.query_all_tables(reader_conf[self.db_type]['tables']) def query_views(self): return self.dao.query_all_views(reader_conf[self.db_type]['views']) def query_procedure(self): pass def query_table_fields(self, table): pass if __name__ == '__main__': local_ds = ds_conf_param('postgresql', 'postgres', 'root@123', 'localhost', 5432, 'postgres') dsm = DataSourceManage(ConnFactory(local_ds)) ds = dsm.get('db143d11741a9575fdea92ed2b39dc53') mtr = MetadataReader(ds) print(mtr.query_tables()) print(mtr.query_views())