| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- from database import MySqlDatabaseHelper
- import json
- from database import CustConfig, OrderConfig
- 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.order_table_dao = self.OrderTableDao(self.db_helper, self._analysis_table_name)
-
- self._initialized = True
-
- class OrderTableDao:
- """订单操作类"""
- def __init__(self, db_helper: MySqlDatabaseHelper, tablename):
- self.db_helper = db_helper
- self.tablename = tablename
-
- def load_data(self, features, city_uuid):
- """获取订单数据"""
- features_column = ",".join(features)
-
- query = f"SELECT {features_column} FROM {self.tablename} WHERE city_uuid = :city_uuid"
- params = {"city_uuid": city_uuid}
-
- data = self.db_helper.load_data_with_page(query, params)
-
- return data
-
- 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 = OrderConfig.FEATURE_COLUMNS
-
- dao = MySqlDao()
- city_uuid = "00000000000000000000000011440101"
-
- data = dao.order_table_dao.load_data(features, city_uuid)
- print(data)
- # 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)
-
|