mysql_dao.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. from database import MySqlDatabaseHelper
  2. import json
  3. from database import CustConfig, OrderConfig
  4. import numpy as np
  5. class MySqlDao:
  6. _instance = None
  7. def __new__(cls):
  8. if not cls._instance:
  9. cls._instance = super(MySqlDao, cls).__new__(cls)
  10. cls._instance._initialized = False
  11. return cls._instance
  12. def __init__(self):
  13. if self._initialized:
  14. return
  15. self.db_helper = MySqlDatabaseHelper()
  16. self._cust_table_name = "tads_brandcul_retail_cust_label" # 商户信息表
  17. self._analysis_table_name = "tads_brandcul_analysis_index" # 指标分析表
  18. self.cust_table_dao = self.CustTableDao(self.db_helper, self._cust_table_name)
  19. self.order_table_dao = self.OrderTableDao(self.db_helper, self._analysis_table_name)
  20. self._initialized = True
  21. class OrderTableDao:
  22. """订单操作类"""
  23. def __init__(self, db_helper: MySqlDatabaseHelper, tablename):
  24. self.db_helper = db_helper
  25. self.tablename = tablename
  26. def load_data(self, features, city_uuid):
  27. """获取订单数据"""
  28. features_column = ",".join(features)
  29. query = f"SELECT {features_column} FROM {self.tablename} WHERE city_uuid = :city_uuid"
  30. params = {"city_uuid": city_uuid}
  31. data = self.db_helper.load_data_with_page(query, params)
  32. return data
  33. class CustTableDao:
  34. """商户数据操作类"""
  35. def __init__(self, db_helper: MySqlDatabaseHelper, tablename):
  36. self.db_helper = db_helper
  37. self.tablename = tablename
  38. def load_data(self, features, corp_uuid):
  39. """读取商户数据"""
  40. features_column = ",".join(features)
  41. query = f"SELECT {features_column} FROM {self.tablename} WHERE corp_uuid = :corp_uuid"
  42. params = {"corp_uuid": corp_uuid}
  43. data = self.db_helper.load_data_with_page(query, params)
  44. return data
  45. def get_column_unique_value(self, column, corp_uuid):
  46. """获取指定列的唯一值列表"""
  47. query = f"SELECT {column} FROM {self.tablename} WHERE corp_uuid = :corp_uuid"
  48. params = {"corp_uuid": corp_uuid}
  49. data = self.db_helper.load_data_with_page(query, params)
  50. data = data[column].unique()
  51. # 将numpy array转换为Python列表,并确保所有元素都是Python原生类型
  52. if data is not None:
  53. # 处理numpy数据类型
  54. data = data.tolist()
  55. # 如果有numpy标量,转换为Python类型
  56. data = [self._convert_to_python_type(item) for item in data]
  57. return data
  58. def _convert_to_python_type(self, item):
  59. """将numpy/pandas类型转换为Python原生类型"""
  60. if isinstance(item, (np.integer, np.floating)):
  61. return item.item()
  62. elif isinstance(item, np.bool_):
  63. return bool(item)
  64. elif isinstance(item, np.ndarray):
  65. return item.tolist()
  66. else:
  67. return item
  68. if __name__ == '__main__':
  69. features = OrderConfig.FEATURE_COLUMNS
  70. dao = MySqlDao()
  71. city_uuid = "00000000000000000000000011440101"
  72. data = dao.order_table_dao.load_data(features, city_uuid)
  73. print(data)
  74. # features = CustConfig.FEATURES_COLUMNS
  75. # features_countent = {}
  76. # for feature in features:
  77. # features_countent[feature] = dao.cust_table_dao.get_column_unique_value(feature, corp_uuid)
  78. # json_str = json.dumps(features_countent, indent=4, ensure_ascii=False)
  79. # print(json_str)
  80. # with open('./cust_features_map.json', 'w', encoding='utf-8') as file:
  81. # file.write(json_str)