mdbq 3.6.12__py3-none-any.whl → 3.6.13__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
mdbq/mysql/s_query.py CHANGED
@@ -49,81 +49,78 @@ class QueryDatas:
49
49
  columns = cursor.fetchall()
50
50
  return columns
51
51
 
52
- def data_to_df(self, db_name, table_name, start_date, end_date, projection: dict=[]):
52
+ def data_to_df(self, db_name, table_name, start_date, end_date, projection: dict = None):
53
53
  """
54
- projection = {'日期': 1, '场景名字': 1,}
54
+ 从数据库表获取数据到DataFrame,支持列筛选和日期范围过滤
55
+ Args:
56
+ db_name: 数据库名
57
+ table_name: 表名
58
+ start_date: 起始日期(包含)
59
+ end_date: 结束日期(包含)
60
+ projection: 列筛选字典,e.g. {'日期': 1, '场景名字': 1}
55
61
  """
56
- if start_date:
57
- start_date = pd.to_datetime(start_date).strftime('%Y-%m-%d')
58
- else:
59
- start_date = '1970-01-01'
60
- if end_date:
61
- end_date = pd.to_datetime(end_date).strftime('%Y-%m-%d')
62
- else:
63
- end_date = datetime.datetime.today().strftime('%Y-%m-%d')
64
- df = pd.DataFrame() # 初始化df
65
-
66
- if self.check_infos(db_name, table_name) == False:
62
+ # 初始化默认参数
63
+ projection = projection or {}
64
+ df = pd.DataFrame()
65
+ # 日期处理
66
+ start_date = pd.to_datetime(start_date or '1970-01-01').strftime('%Y-%m-%d')
67
+ end_date = pd.to_datetime(end_date or datetime.datetime.today()).strftime('%Y-%m-%d')
68
+
69
+ # 前置检查
70
+ if not self.check_infos(db_name, table_name):
67
71
  return df
68
72
 
69
- self.config.update({'database': db_name})
70
- connection = pymysql.connect(**self.config) # 重新连接数据库
73
+ # 配置数据库连接
74
+ self.config['database'] = db_name
75
+ connection = None
71
76
 
72
- with connection.cursor() as cursor:
73
- # 3. 获取数据表的所有列信息
74
- sql = 'SELECT `COLUMN_NAME` FROM information_schema.columns WHERE table_schema = %s AND table_name = %s'
75
- cursor.execute(sql, (db_name, {table_name}))
76
- columns = cursor.fetchall()
77
- cols_exist = [col['COLUMN_NAME'] for col in columns] # 数据表的所有列, 返回 list
77
+ try:
78
+ connection = pymysql.connect(**self.config)
79
+ with connection.cursor() as cursor:
80
+ # 获取表结构(排除id列)
81
+ cursor.execute(
82
+ """SELECT COLUMN_NAME
83
+ FROM information_schema.columns
84
+ WHERE table_schema = %s AND table_name = %s""",
85
+ (db_name, table_name)
86
+ )
87
+ cols_exist = {col['COLUMN_NAME'] for col in cursor.fetchall()} - {'id'}
88
+
89
+ # 处理列选择
90
+ selected_columns = []
91
+ if projection:
92
+ selected_columns = [k for k, v in projection.items() if v and k in cols_exist]
93
+ if not selected_columns:
94
+ print("Warning: Projection 参数不匹配任何数据库字段")
95
+ return df
96
+ else:
97
+ selected_columns = list(cols_exist)
98
+ # 构建基础SQL
99
+ quoted_columns = [f'`{col}`' for col in selected_columns]
100
+ base_sql = f"SELECT {', '.join(quoted_columns)} FROM `{db_name}`.`{table_name}`"
101
+
102
+ # 添加日期条件
103
+ if '日期' in cols_exist:
104
+ base_sql += f" WHERE 日期 BETWEEN '{start_date}' AND '{end_date}'"
105
+
106
+ # 执行查询
107
+ cursor.execute(base_sql)
108
+ result = cursor.fetchall()
109
+
110
+ # 处理结果集
111
+ if result:
112
+ df = pd.DataFrame(result, columns=[desc[0] for desc in cursor.description])
113
+ # 类型转换优化
114
+ decimal_cols = [col for col in df.columns if df[col].apply(lambda x: isinstance(x, Decimal)).any()]
115
+ df[decimal_cols] = df[decimal_cols].astype(float)
78
116
 
79
- # 4. 构建 SQL 查询语句
80
- if projection: # 获取指定列
81
- columns_in = []
82
- for key, value in projection.items():
83
- if value == 1 and key in cols_exist:
84
- columns_in.append(key) # 提取值为 1 的键并清理不在数据表的键
85
- columns_in = [f"`{item}`" for item in columns_in]
86
- if not columns_in:
87
- print(f'传递的参数 projection,在数据库中没有找到匹配的列,请检查 projection: {projection}')
88
- return df
89
- columns_in = ', '.join(columns_in)
90
- if '日期' in cols_exist: # 不论是否指定, 只要数据表有日期,则执行
91
- sql = (f"SELECT {columns_in} FROM `{db_name}`.`{table_name}` "
92
- f"WHERE {'日期'} BETWEEN '{start_date}' AND '{end_date}'")
93
- else: # 数据表没有日期列时,返回指定列的所有数据
94
- sql = f"SELECT {columns_in} FROM `{db_name}`.`{table_name}`"
95
- else: # 没有指定获取列时
96
- if '日期' in cols_exist: # 但数据表有日期,仍然执行
97
- cols_exist = [f"`{item}`" for item in cols_exist]
98
- columns_in = ', '.join(cols_exist)
99
- sql = (f"SELECT {columns_in} FROM `{db_name}`.`{table_name}` "
100
- f"WHERE {'日期'} BETWEEN '{start_date}' AND '{end_date}'")
101
- else: # 没有指定获取列,且数据表也没有日期列,则返回全部列的全部数据
102
- all_col = ', '.join([f"`{item}`" for item in cols_exist if item != 'id'])
103
- sql = f"SELECT %s FROM `%s`.`%s`" % (all_col, db_name, table_name)
104
- # print(sql)
105
- cursor.execute(sql)
106
- rows = cursor.fetchall() # 获取查询结果
107
- columns = [desc[0] for desc in cursor.description]
108
- df = pd.DataFrame(rows, columns=columns) # 转为 df
109
- # 使用applymap将每个Decimal转换为float
110
- df_float = df.applymap(lambda x: float(x) if isinstance(x, Decimal) else x)
111
-
112
- if 'id' in df.columns.tolist():
113
- df.pop('id') # 默认不返回 id 列
114
- if len(df) == 0:
115
- print(f's_query.py -> data_to_df -> database: {db_name}, table: {table_name} 查询的数据为空1')
116
- connection.close()
117
- return df
117
+ except Exception as e:
118
+ print(f"Database operation failed: {str(e)}")
119
+ finally:
120
+ if connection:
121
+ connection.close()
118
122
 
119
- # if len(df) == 0:
120
- # print(f'database: {db_name}, table: {table_name} 查询的数据为空2')
121
- # return pd.DataFrame()
122
- # cv = converter.DataFrameConverter()
123
- # df = cv.convert_df_cols(df)
124
- # if 'id' in df.columns.tolist():
125
- # df.pop('id') # 默认不返回 id 列
126
- # return df
123
+ return df
127
124
 
128
125
  def columns_to_list(self, db_name, table_name, columns_name) -> list:
129
126
  """
mdbq/redis/getredis.py CHANGED
@@ -358,6 +358,7 @@ class RedisDataHash(object):
358
358
  return self.get_from_mysql(db_name, table_name, set_year, start_date, end_date, projection)
359
359
 
360
360
  filtered_df = self._filter_by_date_range(cache_data, start_dt, end_dt)
361
+
361
362
  if not filtered_df.empty:
362
363
  if '日期' in filtered_df.columns.tolist():
363
364
  exsit_min_date = filtered_df['日期'].min()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 3.6.12
3
+ Version: 3.6.13
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -21,7 +21,7 @@ mdbq/mysql/__init__.py,sha256=A_DPJyAoEvTSFojiI2e94zP0FKtCkkwKP1kYUCSyQzo,11
21
21
  mdbq/mysql/mysql.py,sha256=_jFo2_OC1BNm5wEmoYiBG_TcuNNA2xUWKNhMBfgDiAM,99699
22
22
  mdbq/mysql/mysql_bak.py,sha256=_jFo2_OC1BNm5wEmoYiBG_TcuNNA2xUWKNhMBfgDiAM,99699
23
23
  mdbq/mysql/recheck_mysql.py,sha256=ppBTfBLgkRWirMVZ31e_ZPULiGPJU7K3PP9G6QBZ3QI,8605
24
- mdbq/mysql/s_query.py,sha256=rUyemVsjFM7OYG_o-DYGy18aRCbMsDlpzNGNS8Un7dg,9722
24
+ mdbq/mysql/s_query.py,sha256=gzXUZ8J4ibavAii2cTH7PsTSIkkIfow7Qa_4k8OU6yY,8698
25
25
  mdbq/mysql/year_month_day.py,sha256=VgewoE2pJxK7ErjfviL_SMTN77ki8GVbTUcao3vFUCE,1523
26
26
  mdbq/other/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
27
27
  mdbq/other/download_sku_picture.py,sha256=GdphR7Q3psXXVuZoyJ4u_6OWn_rWlcbT0iJ-1zPT6O0,45368
@@ -34,11 +34,11 @@ mdbq/pbix/pbix_refresh.py,sha256=JUjKW3bNEyoMVfVfo77UhguvS5AWkixvVhDbw4_MHco,239
34
34
  mdbq/pbix/refresh_all.py,sha256=OBT9EewSZ0aRS9vL_FflVn74d4l2G00wzHiikCC4TC0,5926
35
35
  mdbq/pbix/refresh_all_old.py,sha256=_pq3WSQ728GPtEG5pfsZI2uTJhU8D6ra-htIk1JXYzw,7192
36
36
  mdbq/redis/__init__.py,sha256=YtgBlVSMDphtpwYX248wGge1x-Ex_mMufz4-8W0XRmA,12
37
- mdbq/redis/getredis.py,sha256=DKahNJeO3W3RZ-u6LsVbbGLi-CK-dZ8y3UV9dxk8YM8,26720
37
+ mdbq/redis/getredis.py,sha256=TJjApXH1w6MA17n_bBEYtjteBZ_ZUp6OTil9uNmdgSk,26722
38
38
  mdbq/redis/getredis_优化hash.py,sha256=q7omKJCPw_6Zr_r6WwTv4RGSXzZzpLPkIaqJ22svJhE,29104
39
39
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
40
40
  mdbq/spider/aikucun.py,sha256=v7VO5gtEXR6_4Q6ujbTyu1FHu7TXHcwSQ6hIO249YH0,22208
41
- mdbq-3.6.12.dist-info/METADATA,sha256=La5gbnCv5fzKJ69TGAZ6HZPgeF_bc8-jJnM0D1r06Fs,244
42
- mdbq-3.6.12.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
43
- mdbq-3.6.12.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
44
- mdbq-3.6.12.dist-info/RECORD,,
41
+ mdbq-3.6.13.dist-info/METADATA,sha256=YeJ-D2GfLIL744EmH07-AvofY8PBIUuWRE6Y2Yzb3So,244
42
+ mdbq-3.6.13.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
43
+ mdbq-3.6.13.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
44
+ mdbq-3.6.13.dist-info/RECORD,,
File without changes