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 +65 -68
- mdbq/redis/getredis.py +1 -0
- {mdbq-3.6.12.dist-info → mdbq-3.6.13.dist-info}/METADATA +1 -1
- {mdbq-3.6.12.dist-info → mdbq-3.6.13.dist-info}/RECORD +6 -6
- {mdbq-3.6.12.dist-info → mdbq-3.6.13.dist-info}/WHEEL +0 -0
- {mdbq-3.6.12.dist-info → mdbq-3.6.13.dist-info}/top_level.txt +0 -0
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
|
-
|
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
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
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
|
-
|
70
|
-
|
73
|
+
# 配置数据库连接
|
74
|
+
self.config['database'] = db_name
|
75
|
+
connection = None
|
71
76
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
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
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
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
|
-
|
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()
|
@@ -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=
|
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=
|
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.
|
42
|
-
mdbq-3.6.
|
43
|
-
mdbq-3.6.
|
44
|
-
mdbq-3.6.
|
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
|
File without changes
|