mdbq 2.7.1__tar.gz → 2.7.2__tar.gz

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.
Files changed (56) hide show
  1. {mdbq-2.7.1 → mdbq-2.7.2}/PKG-INFO +1 -1
  2. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/aggregation/aggregation.py +16 -26
  3. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/aggregation/mysql_types.py +83 -90
  4. mdbq-2.7.2/mdbq/aggregation/optimize_data.py +94 -0
  5. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/aggregation/query_data.py +256 -295
  6. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/clean/clean_upload.py +103 -187
  7. mdbq-2.7.2/mdbq/config/myconfig.py +30 -0
  8. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/config/products.py +31 -34
  9. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/mysql/mysql.py +12 -42
  10. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/mysql/s_query.py +4 -3
  11. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq.egg-info/PKG-INFO +1 -1
  12. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq.egg-info/SOURCES.txt +1 -0
  13. {mdbq-2.7.1 → mdbq-2.7.2}/setup.py +1 -1
  14. mdbq-2.7.1/mdbq/aggregation/optimize_data.py +0 -116
  15. {mdbq-2.7.1 → mdbq-2.7.2}/README.txt +0 -0
  16. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/__init__.py +0 -0
  17. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/__version__.py +0 -0
  18. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/aggregation/__init__.py +0 -0
  19. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/aggregation/df_types.py +0 -0
  20. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/bdup/__init__.py +0 -0
  21. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/bdup/bdup.py +0 -0
  22. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/clean/__init__.py +0 -0
  23. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/clean/data_clean.py +0 -0
  24. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/company/__init__.py +0 -0
  25. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/company/copysh.py +0 -0
  26. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/company/copysh_bak.py +0 -0
  27. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/company/home_sh.py +0 -0
  28. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/config/__init__.py +0 -0
  29. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/config/get_myconf.py +0 -0
  30. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/config/set_support.py +0 -0
  31. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/config/update_conf.py +0 -0
  32. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/dataframe/__init__.py +0 -0
  33. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/dataframe/converter.py +0 -0
  34. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/log/__init__.py +0 -0
  35. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/log/mylogger.py +0 -0
  36. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/mongo/__init__.py +0 -0
  37. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/mongo/mongo.py +0 -0
  38. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/mysql/__init__.py +0 -0
  39. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/mysql/recheck_mysql.py +0 -0
  40. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/mysql/year_month_day.py +0 -0
  41. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/other/__init__.py +0 -0
  42. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/other/porxy.py +0 -0
  43. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/other/pov_city.py +0 -0
  44. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/other/sku_picture.py +0 -0
  45. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/other/ua_sj.py +0 -0
  46. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/pbix/__init__.py +0 -0
  47. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/pbix/pbix_refresh.py +0 -0
  48. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/pbix/refresh_all.py +0 -0
  49. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/pbix/refresh_all_old.py +0 -0
  50. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/req_post/__init__.py +0 -0
  51. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/req_post/req_tb.py +0 -0
  52. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/spider/__init__.py +0 -0
  53. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq/spider/aikucun.py +0 -0
  54. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq.egg-info/dependency_links.txt +0 -0
  55. {mdbq-2.7.1 → mdbq-2.7.2}/mdbq.egg-info/top_level.txt +0 -0
  56. {mdbq-2.7.1 → mdbq-2.7.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 2.7.1
3
+ Version: 2.7.2
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1290,32 +1290,23 @@ def file_dir(one_file=True, target_service='company'):
1290
1290
 
1291
1291
 
1292
1292
  def test():
1293
- path = os.path.relpath(r'C:\Users\Administrator\Downloads\JD商品明细sku')
1293
+ path = os.path.relpath(r'C:\同步空间\BaiduSyncdisk\原始文件3\京东报表\京准通_全sdfsdf站营销')
1294
1294
  for root, dirs, files in os.walk(path, topdown=False):
1295
1295
  for name in files:
1296
1296
  if name.endswith('.csv') and 'baidu' not in name and '~' not in name:
1297
- print(name)
1297
+ # print(name)
1298
1298
  # df = pd.read_excel(os.path.join(root, name), header=0)
1299
1299
  df = pd.read_csv(os.path.join(root, name), encoding='utf-8_sig', header=0, na_filter=False)
1300
+ print(name, len(df))
1301
+ if len(df) == 0:
1302
+ print(name)
1303
+ os.remove(os.path.join(root, name))
1304
+ continue
1300
1305
  cols = df.columns.tolist()
1301
1306
  if '店铺名称' not in cols:
1302
1307
  df.insert(loc=1, column='店铺名称', value='京东箱包旗舰店')
1303
- if '曝光量' in cols:
1304
- df.rename(columns={
1305
- '曝光量': '搜索曝光量',
1306
- '点击次数': '搜索点击次数',
1307
- '点击率': '搜索点击率',
1308
- }, inplace=True)
1309
- if '取消金额' in cols:
1310
- df.rename(columns={
1311
- '取消金额': '取消及售后退款金额',
1312
- '取消商品件数': '取消及售后退款件数',
1313
- '取消单量': '取消及售后退款单量',
1314
- }, inplace=True)
1315
- if '取消及售后退款金额' not in cols:
1316
- df['取消及售后退款金额'] = '0.0'
1317
- df['取消及售后退款件数'] = 0
1318
- df['取消及售后退款单量'] = 0
1308
+ if '全站roi' in cols:
1309
+ df.rename(columns={'全站roi': '全站投产比'}, inplace=True)
1319
1310
  df.to_csv(os.path.join(root, name), encoding='utf-8_sig', index=False, header=True)
1320
1311
  # new_name = f'{os.path.splitext(name)[0]}.xlsx'
1321
1312
  # df.to_excel(os.path.join(root, name),
@@ -1331,23 +1322,22 @@ if __name__ == '__main__':
1331
1322
 
1332
1323
  # # 上传 1 个文件到数据库
1333
1324
  # one_file_to_mysql(
1334
- # file='/Users/xigua/Downloads/万里马箱包推广1_营销概况_qwqw全站营销_2024-08-18_2024-09-01.csv',
1335
- # db_name='京东数据3',
1336
- # table_name='推广数据_全站营销',
1337
- # target_service='company',
1325
+ # file=r'C:\同步空间\BaiduSyncdisk\原始文件2\属性设置\电商定价.csv',
1326
+ # db_name='属性设置3',
1327
+ # table_name='电商定价',
1328
+ # target_service='home_lx',
1338
1329
  # database='mysql'
1339
1330
  # )
1340
1331
 
1341
1332
  # 上传一个目录到指定数据库
1342
- db_name = '京东数据3'
1343
- table_name = '京东商智_spu_商品明细'
1333
+ db_name = '推广数据2'
1334
+ table_name = '品销宝'
1344
1335
  upload_dir(
1345
- path=os.path.relpath(r'C:\同步空间\BaiduSyncdisk\原始文件3\京东报表\京东商智_spu_商品明细'),
1336
+ path=os.path.relpath(r'C:\同步空间\BaiduSyncdisk\原始文件3\天猫推广报表\品销宝'),
1346
1337
  db_name=db_name,
1347
1338
  collection_name=table_name,
1348
1339
  dbs={'mysql': True, 'mongodb': False},
1349
1340
  target_service='home_lx',
1350
1341
  )
1351
1342
 
1352
-
1353
1343
  # test()
@@ -1,28 +1,20 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  import warnings
3
3
  import pandas as pd
4
- import numpy as np
5
- import chardet
6
- import zipfile
7
-
8
- from numpy import dtype
9
- from pandas.tseries.holiday import next_monday
10
- from pyzipper import PyZipFile
11
4
  import os
12
5
  import platform
13
6
  import json
14
7
  import pymysql
8
+ import socket
15
9
  from mdbq.mongo import mongo
16
10
  from mdbq.mysql import mysql
17
11
  from mdbq.mysql import s_query
18
- from mdbq.config import get_myconf
12
+ from mdbq.config import myconfig
19
13
  from mdbq.config import set_support
20
14
  from mdbq.dataframe import converter
21
15
  import datetime
22
16
  import time
23
17
  import re
24
- import shutil
25
- import getpass
26
18
 
27
19
  from sqlalchemy.dialects.postgresql.pg_catalog import pg_get_serial_sequence
28
20
 
@@ -54,7 +46,7 @@ class DataTypes:
54
46
  self.path = set_support.SetSupport(dirname='support').dirname
55
47
  self.service_name = service_name
56
48
  if not self.service_name:
57
- self.service_name = 'home_lx'
49
+ self.service_name = 'xigua_lx'
58
50
  self.json_file = os.path.join(self.path, f'mysql_types_{self.service_name}.json')
59
51
  if not os.path.isdir(self.path):
60
52
  os.makedirs(self.path)
@@ -154,88 +146,89 @@ class DataTypes:
154
146
  return {}, cl, None, None # 返回这些结果的目的是等添加完列再写 json 文件才能读到 types 信息
155
147
 
156
148
 
157
- def mysql_all_dtypes(db_name=None, table_name=None, service_database={'home_lx': 'mysql'}, path=None):
149
+ def mysql_all_dtypes(db_name=None, table_name=None, path=None):
158
150
  """
159
- 更新笔记本 mysql 中所有数据库的 dtypes 信息到本地 json
151
+ 更新 mysql 中所有数据库的 dtypes 信息到本地 json
160
152
  """
161
- for service_name, database in service_database.items():
162
- username, password, host, port = get_myconf.select_config_values(target_service=service_name, database=database)
163
- config = {
164
- 'host': host,
165
- 'port': port,
166
- 'user': username,
167
- 'password': password,
168
- 'charset': 'utf8mb4', # utf8mb4 支持存储四字节的UTF-8字符集
169
- 'cursorclass': pymysql.cursors.DictCursor,
170
- }
171
-
153
+ username, password, host, port, service_name = None, None, None, None, None
154
+ conf = myconfig.main()
155
+ if socket.gethostname().lower() in ['xigua_lx', 'xigua1', 'macbook pro']:
156
+ data = conf['Windows']['xigua_lx']['mysql']['local']
157
+ username, password, host, port = data['username'], data['password'], data['host'], data['port']
158
+ service_name = 'xigua_lx' # 影响 mysql_types_xigua_lx.json 文件名
159
+ elif socket.gethostname().lower() in ['company', 'Mac2.local']:
160
+ data = conf['Windows']['company']['mysql']['local']
161
+ username, password, host, port = data['username'], data['password'], data['host'], data['port']
162
+ service_name = 'company' # 影响 mysql_types_company.json 文件名
163
+ if not username or not service_name:
164
+ return
165
+
166
+ config = {
167
+ 'host': host,
168
+ 'port': int(port),
169
+ 'user': username,
170
+ 'password': password,
171
+ 'charset': 'utf8mb4', # utf8mb4 支持存储四字节的UTF-8字符集
172
+ 'cursorclass': pymysql.cursors.DictCursor,
173
+ }
174
+ connection = pymysql.connect(**config) # 连接数据库
175
+ with connection.cursor() as cursor:
176
+ sql = "SHOW DATABASES;"
177
+ cursor.execute(sql)
178
+ db_name_lists = cursor.fetchall()
179
+ db_name_lists = [item['Database'] for item in db_name_lists]
180
+ connection.close()
181
+
182
+ sys_lists = ['information_schema', 'mysql', 'performance_schema', 'sakila', 'sys']
183
+ db_name_lists = [item for item in db_name_lists if item not in sys_lists]
184
+
185
+ results = [] # 返回结果示例: [{'云电影': '电影更新'}, {'生意经2': 'e3_零售明细统计'}]
186
+ for db_ in db_name_lists:
187
+ config.update({'database': db_}) # 添加更新 config 字段
172
188
  connection = pymysql.connect(**config) # 连接数据库
173
- with connection.cursor() as cursor:
174
- sql = "SHOW DATABASES;"
175
- cursor.execute(sql)
176
- db_name_lists = cursor.fetchall()
177
- db_name_lists = [item['Database'] for item in db_name_lists]
189
+ try:
190
+ with connection.cursor() as cursor:
191
+ sql = f"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{db_}';"
192
+ sql = "SHOW TABLES;"
193
+ cursor.execute(sql)
194
+ res_tables = cursor.fetchall()
195
+ for res_table in res_tables:
196
+ for k, v in res_table.items():
197
+ results.append({db_: v})
198
+ except:
199
+ pass
200
+ finally:
178
201
  connection.close()
179
-
180
- sys_lists = ['information_schema', 'mysql', 'performance_schema', 'sakila', 'sys']
181
- db_name_lists = [item for item in db_name_lists if item not in sys_lists]
182
-
183
- # db_name_lists = [
184
- # '京东数据2',
185
- # '推广数据2',
186
- # '市场数据2',
187
- # '生意参谋2',
188
- # '生意经2',
189
- # '属性设置2',
190
- # '聚合数据',
191
- # ]
192
- results = [] # 返回结果示例: [{'云电影': '电影更新'}, {'生意经2': 'e3_零售明细统计'}]
193
- for db_ in db_name_lists:
194
- config.update({'database': db_}) # 添加更新 config 字段
195
- connection = pymysql.connect(**config) # 连接数据库
196
- try:
197
- with connection.cursor() as cursor:
198
- sql = f"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{db_}';"
199
- sql = "SHOW TABLES;"
200
- cursor.execute(sql)
201
- res_tables = cursor.fetchall()
202
- for res_table in res_tables:
203
- for k, v in res_table.items():
204
- results.append({db_: v})
205
- except:
206
- pass
207
- finally:
208
- connection.close()
209
- time.sleep(0.5)
210
-
211
- d = DataTypes(path=path, service_name=service_name)
212
- for result in results:
213
- for db_n, table_n in result.items():
214
- # print(db_n, table_n, db_name, table_name)
215
- if db_name and table_name: # 下载一个指定的数据表
216
- if db_name != db_n or table_name != table_n:
217
- continue
218
- elif db_name: # 下载一个数据库的所有数据表
219
- if db_name != db_n:
220
- continue
221
- # 如果 db_name 和 table_name 都不指定,则下载所有数据库的所有数据表
222
- print(f'获取列信息 数据库: < {db_n} >, 数据表: < {table_n} >')
223
- sq = s_query.QueryDatas(username=username, password=password, host=host, port=port)
224
- # 获取数据表的指定列, 返回列表
225
- # [{'视频bv号': 'BV1Dm4y1S7BU', '下载进度': 1}, {'视频bv号': 'BV1ov411c7US', '下载进度': 1}]
226
- name_type = sq.dtypes_to_list(db_name=db_n, table_name=table_n)
227
- if name_type:
228
- dtypes = {item['COLUMN_NAME']: item['COLUMN_TYPE'] for item in name_type}
229
- dtypes = {'mysql': {db_n: {table_n: dtypes}}}
230
- d.get_mysql_types(
231
- dtypes=dtypes,
232
- cl='mysql',
233
- db_name=db_n,
234
- table_name=table_n,
235
- is_file_dtype=True # True表示旧文件有限
236
- )
237
- else:
238
- print(f'数据库回传数据(name_type)为空')
202
+ time.sleep(0.5)
203
+
204
+ d = DataTypes(path=path, service_name=service_name)
205
+ for result in results:
206
+ for db_n, table_n in result.items():
207
+ # print(db_n, table_n, db_name, table_name)
208
+ if db_name and table_name: # 下载一个指定的数据表
209
+ if db_name != db_n or table_name != table_n:
210
+ continue
211
+ elif db_name: # 下载一个数据库的所有数据表
212
+ if db_name != db_n:
213
+ continue
214
+ # 如果 db_name 和 table_name 都不指定,则下载所有数据库的所有数据表
215
+ print(f'获取列信息 数据库: < {db_n} >, 数据表: < {table_n} >')
216
+ sq = s_query.QueryDatas(username=username, password=password, host=host, port=port)
217
+ # 获取数据表的指定列, 返回列表
218
+ # [{'视频bv号': 'BV1Dm4y1S7BU', '下载进度': 1}, {'视频bv号': 'BV1ov411c7US', '下载进度': 1}]
219
+ name_type = sq.dtypes_to_list(db_name=db_n, table_name=table_n)
220
+ if name_type:
221
+ dtypes = {item['COLUMN_NAME']: item['COLUMN_TYPE'] for item in name_type}
222
+ dtypes = {'mysql': {db_n: {table_n: dtypes}}}
223
+ d.get_mysql_types(
224
+ dtypes=dtypes,
225
+ cl='mysql',
226
+ db_name=db_n,
227
+ table_name=table_n,
228
+ is_file_dtype=True # True表示旧文件有限
229
+ )
230
+ else:
231
+ print(f'数据库回传数据(name_type)为空')
239
232
  # print(d.datas)
240
233
  d.as_json_file()
241
234
 
@@ -243,5 +236,5 @@ def mysql_all_dtypes(db_name=None, table_name=None, service_database={'home_lx':
243
236
  if __name__ == '__main__':
244
237
  # 更新 mysql 中所有数据库的 dtypes 信息到本地 json
245
238
  mysql_all_dtypes(
246
- path='/Users/xigua/Downloads', service_name='company',
239
+ path='/Users/xigua/Downloads',
247
240
  )
@@ -0,0 +1,94 @@
1
+ # -*- coding: UTF-8 –*-
2
+ from mdbq.mongo import mongo
3
+ from mdbq.mysql import mysql
4
+ from mdbq.config import myconfig
5
+ import socket
6
+ import subprocess
7
+ import psutil
8
+ import time
9
+ import platform
10
+ """
11
+ 对指定数据库所有冗余数据进行清理
12
+ """
13
+ if socket.gethostname().lower() in ['xigua_lx', 'xigua1', 'macbook pro']:
14
+ conf = myconfig.main()
15
+ data = conf['Windows']['xigua_lx']['mysql']['local']
16
+ username, password, host, port = data['username'], data['password'], data['host'], data['port']
17
+ service_database = {'xigua_lx': 'mysql'}
18
+ elif socket.gethostname().lower() in ['company', 'Mac2.local']:
19
+ conf = myconfig.main()
20
+ data = conf['Windows']['company']['mysql']['local']
21
+ username, password, host, port = data['username'], data['password'], data['host'], data['port']
22
+ service_database = {'company': 'mysql'}
23
+ if not username:
24
+ print(f'找不到主机:')
25
+
26
+
27
+
28
+ def restart_mongodb():
29
+ """
30
+ 检查服务, 并重启, 只能操作本机
31
+ """
32
+
33
+ def get_pid(program_name):
34
+ # macos 系统中,使用psutil.process_iter()遍历系统中所有运行的进程
35
+ for process in psutil.process_iter(['name', 'pid']):
36
+ if process.info['name'] == program_name:
37
+ return process.info['pid']
38
+ return None
39
+
40
+ if platform.system() == 'Windows':
41
+ print(f'即将重启 mongodb 服务')
42
+ time.sleep(60)
43
+ stop_command = f'net stop MongoDB'
44
+ subprocess.call(stop_command, shell=True) # 停止MongoDB服务
45
+
46
+ time.sleep(30)
47
+ start_command = f'net start MongoDB'
48
+ subprocess.call(start_command, shell=True) # 启动MongoDB服务
49
+ time.sleep(30)
50
+
51
+ elif platform.system() == 'Darwin':
52
+ print(f'即将重启 mongodb 服务')
53
+ time.sleep(60)
54
+ result = get_pid('mongod') # 获取进程号
55
+ if result: # 有 pid, 重启服务
56
+ command = f'kill {result}'
57
+ subprocess.call(command, shell=True)
58
+ time.sleep(10)
59
+ command = f'mongod --config /usr/local/mongodb/mongod.conf'
60
+ subprocess.call(command, shell=True)
61
+ # print('已重启服务')
62
+ else: # 没有启动, 则启动服务
63
+ command = f'mongod --config /usr/local/mongodb/mongod.conf'
64
+ subprocess.call(command, shell=True)
65
+
66
+ elif platform.system() == 'Linux':
67
+ print(f'即将重启 mongodb 服务')
68
+ time.sleep(60)
69
+ command = f'service mongod restart'
70
+ subprocess.call(command, shell=True)
71
+
72
+
73
+ def op_data(db_name_lists, days: int = 63, is_mongo=True, is_mysql=True):
74
+ """ """
75
+
76
+ if socket.gethostname() == 'xigua_lx' or socket.gethostname() == 'xigua1' or socket.gethostname() == 'Mac2.local':
77
+ # Mysql
78
+ if is_mysql:
79
+ s = mysql.OptimizeDatas(username=username, password=password, host=host, port=port)
80
+ s.db_name_lists = db_name_lists
81
+ s.days = days
82
+ s.optimize_list()
83
+
84
+ elif socket.gethostname() == 'company':
85
+ # Mysql
86
+ if is_mysql:
87
+ s = mysql.OptimizeDatas(username=username, password=password, host=host, port=port)
88
+ s.db_name_lists = db_name_lists
89
+ s.days = days
90
+ s.optimize_list()
91
+
92
+
93
+ if __name__ == '__main__':
94
+ op_data(db_name_lists=['聚合数据'], days=10, is_mongo=True, is_mysql=True)