| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- from database import MySqlDatabaseHelper
- import json
- from database import CustConfig
- import numpy as np
- class MySqlDao:
- _instance = None
-
- def __new__(cls):
- if not cls._instance:
- cls._instance = super(MySqlDao, cls).__new__(cls)
- cls._instance._initialized = False
- return cls._instance
-
- def __init__(self):
- if self._initialized:
- return
-
- self.db_helper = MySqlDatabaseHelper()
-
- self._cust_table_name = "tads_brandcul_retail_cust_label" # 商户信息表
- self._analysis_table_name = "tads_brandcul_analysis_index" # 指标分析表
-
- self.cust_table_dao = self.CustTableDao(self.db_helper, self._cust_table_name)
-
- self._initialized = True
-
- class CustTableDao:
- """商户数据操作类"""
- def __init__(self, db_helper: MySqlDatabaseHelper, tablename):
- self.db_helper = db_helper
- self.tablename = tablename
-
- def load_data(self, features, corp_uuid):
- """读取商户数据"""
- features_column = ",".join(features)
-
- query = f"SELECT {features_column} FROM {self.tablename} WHERE corp_uuid = :corp_uuid"
- params = {"corp_uuid": corp_uuid}
-
- data = self.db_helper.load_data_with_page(query, params)
-
- return data
-
- def get_column_unique_value(self, column, corp_uuid):
- """获取指定列的唯一值列表"""
- query = f"SELECT {column} FROM {self.tablename} WHERE corp_uuid = :corp_uuid"
- params = {"corp_uuid": corp_uuid}
-
- data = self.db_helper.load_data_with_page(query, params)
- data = data[column].unique()
-
- # 将numpy array转换为Python列表,并确保所有元素都是Python原生类型
- if data is not None:
- # 处理numpy数据类型
- data = data.tolist()
- # 如果有numpy标量,转换为Python类型
- data = [self._convert_to_python_type(item) for item in data]
-
- return data
-
- def _convert_to_python_type(self, item):
- """将numpy/pandas类型转换为Python原生类型"""
- if isinstance(item, (np.integer, np.floating)):
- return item.item()
- elif isinstance(item, np.bool_):
- return bool(item)
- elif isinstance(item, np.ndarray):
- return item.tolist()
- else:
- return item
-
-
-
-
-
- if __name__ == '__main__':
- features = ["busi_place_area_section"]
-
- dao = MySqlDao()
- corp_uuid = "00000000000000000000000011440101"
-
- features = CustConfig.FEATURES_COLUMNS
- features_countent = {}
- for feature in features:
- features_countent[feature] = dao.cust_table_dao.get_column_unique_value(feature, corp_uuid)
-
- json_str = json.dumps(features_countent, indent=4, ensure_ascii=False)
-
- print(json_str)
- with open('./cust_features_map.json', 'w', encoding='utf-8') as file:
- file.write(json_str)
-
|