mdbq 2.1.8__py3-none-any.whl → 2.2.0__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/aggregation/aggregation.py +1 -1
- mdbq/aggregation/query_data.py +4 -1
- mdbq/company/copysh.py +8 -8
- mdbq/mysql/s_query.py +1 -0
- mdbq/pbix/refresh_all.py +65 -90
- mdbq/pbix/refresh_all_old.py +177 -0
- {mdbq-2.1.8.dist-info → mdbq-2.2.0.dist-info}/METADATA +1 -1
- {mdbq-2.1.8.dist-info → mdbq-2.2.0.dist-info}/RECORD +10 -9
- {mdbq-2.1.8.dist-info → mdbq-2.2.0.dist-info}/WHEEL +0 -0
- {mdbq-2.1.8.dist-info → mdbq-2.2.0.dist-info}/top_level.txt +0 -0
mdbq/aggregation/aggregation.py
CHANGED
@@ -88,7 +88,7 @@ class DatabaseUpdate:
|
|
88
88
|
df = pd.DataFrame() # 初始化 df
|
89
89
|
encoding = self.get_encoding(file_path=os.path.join(root, name)) # 用于处理 csv 文件
|
90
90
|
tg_names = [
|
91
|
-
'账户报表', # 旧版,后来改成 营销场景报表了,C 店还是旧版
|
91
|
+
# '账户报表', # 旧版,后来改成 营销场景报表了,C 店还是旧版
|
92
92
|
'营销场景报表',
|
93
93
|
'计划报表',
|
94
94
|
'单元报表',
|
mdbq/aggregation/query_data.py
CHANGED
@@ -557,11 +557,14 @@ class MysqlDatasQuery:
|
|
557
557
|
|
558
558
|
df_tb = self.download.data_to_df(
|
559
559
|
db_name='推广数据_淘宝店',
|
560
|
-
table_name='
|
560
|
+
table_name='营销场景报表',
|
561
561
|
start_date=start_date,
|
562
562
|
end_date=end_date,
|
563
563
|
projection=projection,
|
564
564
|
)
|
565
|
+
# print(df_tb)
|
566
|
+
# df_tm.to_csv('/Users/xigua/Downloads/test2.csv', index=False, header=True, encoding='utf-8_sig')
|
567
|
+
# df_tb.to_csv('/Users/xigua/Downloads/test.csv', index=False, header=True, encoding='utf-8_sig')
|
565
568
|
df_tb.rename(columns={'场景名字': '营销场景'}, inplace=True)
|
566
569
|
df_tb = df_tb.groupby(
|
567
570
|
['日期', '营销场景', '花费'],
|
mdbq/company/copysh.py
CHANGED
@@ -257,14 +257,15 @@ class TbFiles:
|
|
257
257
|
files = os.listdir(excel_path)
|
258
258
|
r = refresh_all.RefreshAll()
|
259
259
|
for file in files:
|
260
|
-
if file
|
261
|
-
|
262
|
-
|
263
|
-
r.
|
264
|
-
time.sleep(
|
260
|
+
if '~' in file or 'DS_Store' in file or 'baidu' in file or 'xunlei' in name:
|
261
|
+
continue
|
262
|
+
if file.endswith('.xlsx') or file.endswith('.xls'):
|
263
|
+
r.refresh_excel(file=file)
|
264
|
+
time.sleep(5)
|
265
265
|
|
266
|
-
|
267
|
-
|
266
|
+
# 临时加的
|
267
|
+
excel_file = f'\\\\192.168.1.198\\时尚事业部\\01.运营部\\0-电商周报-每周五更新\\WLM 周报-模版V1.xlsx'
|
268
|
+
r.refresh_excel(file=excel_file)
|
268
269
|
|
269
270
|
self.before_max_time = self.check_change() # 重置值, 避免重复同步
|
270
271
|
|
@@ -403,4 +404,3 @@ if __name__ == '__main__':
|
|
403
404
|
main()
|
404
405
|
# # 聚合数据,并清理聚合数据
|
405
406
|
# query_data.data_aggregation(service_databases=[{'company': 'mysql'}], months=1)
|
406
|
-
|
mdbq/mysql/s_query.py
CHANGED
@@ -79,6 +79,7 @@ class QueryDatas:
|
|
79
79
|
else: # 没有指定获取列,且数据表也没有日期列,则返回全部列的全部数据
|
80
80
|
all_col = ', '.join([f"`{item}`" for item in cols_exist if item != 'id'])
|
81
81
|
sql = f"SELECT %s FROM `%s`.`%s`" % (all_col, db_name, table_name)
|
82
|
+
# print(sql)
|
82
83
|
cursor.execute(sql)
|
83
84
|
rows = cursor.fetchall() # 获取查询结果
|
84
85
|
columns = [desc[0] for desc in cursor.description]
|
mdbq/pbix/refresh_all.py
CHANGED
@@ -2,115 +2,90 @@ import os
|
|
2
2
|
import sys
|
3
3
|
import win32com.client
|
4
4
|
import time
|
5
|
-
import multiprocessing
|
6
5
|
import psutil
|
7
6
|
from pywinauto.application import Application
|
8
7
|
import warnings
|
9
|
-
from mdbq.config import set_support
|
8
|
+
# from mdbq.config import set_support
|
10
9
|
|
11
10
|
warnings.filterwarnings('ignore')
|
12
|
-
top_path = os.path.realpath(os.path.dirname(sys.argv[0])) # 程序运行目录, 打包时使用
|
13
|
-
sys.path.append(top_path)
|
11
|
+
# top_path = os.path.realpath(os.path.dirname(sys.argv[0])) # 程序运行目录, 打包时使用
|
12
|
+
# sys.path.append(top_path)
|
14
13
|
|
15
14
|
|
16
15
|
class RefreshAll:
|
17
16
|
def __init__(self):
|
18
|
-
self.my_conf = os.path.join(set_support.SetSupport(dirname='support').dirname, '.my_conf')
|
19
|
-
self.
|
20
|
-
self.excel_path = os.path.join(set_support.SetSupport(dirname='support').dirname, 'ref_list.txt')
|
21
|
-
self.run_py_path = 'run_py'
|
17
|
+
# self.my_conf = os.path.join(set_support.SetSupport(dirname='support').dirname, '.my_conf')
|
18
|
+
# self.file = None
|
22
19
|
self.procname = 'PBIDesktop.exe'
|
23
20
|
|
24
|
-
def refresh_pbix(self):
|
21
|
+
def refresh_pbix(self, file):
|
25
22
|
# 刷新 PBI
|
26
|
-
if not os.path.
|
27
|
-
print(f'{
|
23
|
+
if not os.path.isfile(file):
|
24
|
+
print(f'{file} -> 文件不存在')
|
28
25
|
return
|
29
|
-
with open(self.pbix_path, 'r', encoding='utf-8') as f:
|
30
|
-
|
31
|
-
|
32
|
-
|
26
|
+
# with open(self.pbix_path, 'r', encoding='utf-8') as f:
|
27
|
+
# content = f.readlines()
|
28
|
+
# content = [item.strip() for item in content if not item.strip().startswith('#') and not item.strip().startswith('[')]
|
29
|
+
# pbix_list = [item for item in content if item]
|
33
30
|
|
34
|
-
if not pbix_list:
|
31
|
+
# if not pbix_list:
|
32
|
+
# return
|
33
|
+
# for filename in pbix_list:
|
34
|
+
if not file.endswith('.pbix'):
|
35
35
|
return
|
36
|
-
for filename in pbix_list:
|
37
|
-
if filename.endswith('.pbix'):
|
38
|
-
newfile = os.path.join(self.run_py_path, filename)
|
39
|
-
"""刷新程序"""
|
40
|
-
for es in range(4):
|
41
|
-
try:
|
42
|
-
print(f'正在刷新 >>>{filename}')
|
43
|
-
self.pbi(path=newfile)
|
44
|
-
print('文件刷新 >>>' + filename)
|
45
|
-
break
|
46
|
-
except Exception as e:
|
47
|
-
print(e)
|
48
|
-
print('报错的文件 >>>' + filename + ' >> ' + str(es + 1))
|
49
|
-
|
50
|
-
def refresh_excel(self):
|
51
|
-
# 刷新 excel
|
52
|
-
if not os.path.exists(self.excel_path):
|
53
|
-
print(f'{self.excel_path}: Excel file not found. ')
|
54
|
-
return
|
55
|
-
with open(self.excel_path, 'r', encoding='utf-8') as f:
|
56
|
-
content = f.readlines()
|
57
|
-
content = [item.strip() for item in content if not item.strip().startswith('#')]
|
58
|
-
excel_list = [item for item in content if item]
|
59
36
|
|
60
|
-
|
61
|
-
|
62
|
-
for filename in excel_list:
|
63
|
-
if filename.endswith('.xlsx'):
|
64
|
-
try:
|
65
|
-
print(f'正在刷新 >>>{filename}')
|
66
|
-
path = os.path.join(top_path, self.run_py_path, filename) # 拼接文件路径
|
67
|
-
xlapp = win32com.client.Dispatch('Excel.Application') # 创建Excel程序App
|
68
|
-
xlapp.Visible = False # 窗口是否可见
|
69
|
-
xlapp.DisplayAlerts = False # 是否显示警告信息
|
70
|
-
wb = xlapp.Workbooks.Open(path)
|
71
|
-
conjuncts = wb.Connections.Count # 统计工作簿含有多少外部链接
|
72
|
-
if conjuncts == 0:
|
73
|
-
wb.Close(SaveChanges=False)
|
74
|
-
xlapp.Quit()
|
75
|
-
else:
|
76
|
-
time.sleep(2)
|
77
|
-
wb.RefreshAll()
|
78
|
-
xlapp.CalculateUntilAsyncQueriesDone()
|
79
|
-
time.sleep(2)
|
80
|
-
wb.Save()
|
81
|
-
wb.Close(SaveChanges=True)
|
82
|
-
xlapp.Quit()
|
83
|
-
print('文件刷新 >>>' + filename)
|
84
|
-
except Exception as e:
|
85
|
-
print(e)
|
86
|
-
|
87
|
-
def refresh_excel2(self, excel_file):
|
88
|
-
# 刷新 excel
|
89
|
-
if excel_file.endswith('.xlsx'):
|
37
|
+
"""刷新程序"""
|
38
|
+
for es in range(4):
|
90
39
|
try:
|
91
|
-
print(f'正在刷新 >>>{
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
wb = xlapp.Workbooks.Open(excel_file)
|
96
|
-
conjuncts = wb.Connections.Count # 统计工作簿含有多少外部链接
|
97
|
-
if conjuncts == 0:
|
98
|
-
wb.Close(SaveChanges=False)
|
99
|
-
xlapp.Quit()
|
100
|
-
else:
|
101
|
-
time.sleep(2)
|
102
|
-
wb.RefreshAll()
|
103
|
-
xlapp.CalculateUntilAsyncQueriesDone()
|
104
|
-
time.sleep(2)
|
105
|
-
wb.Save()
|
106
|
-
wb.Close(SaveChanges=True)
|
107
|
-
xlapp.Quit()
|
108
|
-
print('文件刷新 >>>' + excel_file)
|
40
|
+
print(f'正在刷新 >>>{file}')
|
41
|
+
self.pbi(path=file)
|
42
|
+
print('文件已刷新!')
|
43
|
+
break
|
109
44
|
except Exception as e:
|
110
45
|
print(e)
|
46
|
+
print('报错的文件 >>>' + file + ' >> ' + str(es + 1))
|
47
|
+
|
48
|
+
def refresh_excel(self, file):
|
49
|
+
# 刷新 excel
|
50
|
+
if not os.path.isfile(file):
|
51
|
+
print(f'{file} -> 文件不存在')
|
52
|
+
return
|
53
|
+
if not file.endswith('.xlsx') and not file.endswith('.xls'):
|
54
|
+
return
|
55
|
+
|
56
|
+
# with open(self.excel_path, 'r', encoding='utf-8') as f:
|
57
|
+
# content = f.readlines()
|
58
|
+
# content = [item.strip() for item in content if not item.strip().startswith('#')]
|
59
|
+
# excel_list = [item for item in content if item]
|
60
|
+
#
|
61
|
+
# if not excel_list:
|
62
|
+
# return
|
63
|
+
try:
|
64
|
+
print(f'正在刷新 >>>{file}')
|
65
|
+
xlapp = win32com.client.Dispatch('Excel.Application') # 创建Excel程序App
|
66
|
+
xlapp.Visible = False # 窗口是否可见
|
67
|
+
xlapp.DisplayAlerts = False # 是否显示警告信息
|
68
|
+
wb = xlapp.Workbooks.Open(file)
|
69
|
+
conjuncts = wb.Connections.Count # 统计工作簿含有多少外部链接
|
70
|
+
if conjuncts == 0:
|
71
|
+
wb.Close(SaveChanges=False)
|
72
|
+
xlapp.Quit()
|
73
|
+
else:
|
74
|
+
time.sleep(2)
|
75
|
+
wb.RefreshAll()
|
76
|
+
xlapp.CalculateUntilAsyncQueriesDone()
|
77
|
+
time.sleep(2)
|
78
|
+
wb.Save()
|
79
|
+
wb.Close(SaveChanges=True)
|
80
|
+
xlapp.Quit()
|
81
|
+
print('文件已刷新!')
|
82
|
+
except Exception as e:
|
83
|
+
print(file, e)
|
84
|
+
|
111
85
|
|
112
86
|
def pbi(self, path, _timeout=300):
|
113
87
|
"""
|
88
|
+
会被 refresh_pbix 函数调用
|
114
89
|
这是原本属于独立的库模块: pbix_refresh
|
115
90
|
path: pbi文件路径
|
116
91
|
_timeout: 刷新等待时间
|
@@ -171,7 +146,7 @@ class RefreshAll:
|
|
171
146
|
|
172
147
|
|
173
148
|
if __name__ == '__main__':
|
174
|
-
r = RefreshAll()
|
175
|
-
# r.refresh_pbix()
|
176
|
-
r.refresh_excel()
|
149
|
+
# r = RefreshAll()
|
150
|
+
# # r.refresh_pbix()
|
151
|
+
# r.refresh_excel()
|
177
152
|
pass
|
@@ -0,0 +1,177 @@
|
|
1
|
+
import os
|
2
|
+
import sys
|
3
|
+
import win32com.client
|
4
|
+
import time
|
5
|
+
import multiprocessing
|
6
|
+
import psutil
|
7
|
+
from pywinauto.application import Application
|
8
|
+
import warnings
|
9
|
+
from mdbq.config import set_support
|
10
|
+
|
11
|
+
warnings.filterwarnings('ignore')
|
12
|
+
top_path = os.path.realpath(os.path.dirname(sys.argv[0])) # 程序运行目录, 打包时使用
|
13
|
+
sys.path.append(top_path)
|
14
|
+
|
15
|
+
|
16
|
+
class RefreshAll:
|
17
|
+
def __init__(self):
|
18
|
+
self.my_conf = os.path.join(set_support.SetSupport(dirname='support').dirname, '.my_conf')
|
19
|
+
self.pbix_path = os.path.join(set_support.SetSupport(dirname='support').dirname, 'ref_list.txt')
|
20
|
+
self.excel_path = os.path.join(set_support.SetSupport(dirname='support').dirname, 'ref_list.txt')
|
21
|
+
self.run_py_path = 'run_py'
|
22
|
+
self.procname = 'PBIDesktop.exe'
|
23
|
+
|
24
|
+
def refresh_pbix(self):
|
25
|
+
# 刷新 PBI
|
26
|
+
if not os.path.exists(self.pbix_path):
|
27
|
+
print(f'{self.pbix_path}: PBIxx file not found. ')
|
28
|
+
return
|
29
|
+
with open(self.pbix_path, 'r', encoding='utf-8') as f:
|
30
|
+
content = f.readlines()
|
31
|
+
content = [item.strip() for item in content if not item.strip().startswith('#') and not item.strip().startswith('[')]
|
32
|
+
pbix_list = [item for item in content if item]
|
33
|
+
|
34
|
+
if not pbix_list:
|
35
|
+
return
|
36
|
+
for filename in pbix_list:
|
37
|
+
if filename.endswith('.pbix'):
|
38
|
+
newfile = os.path.join(self.run_py_path, filename)
|
39
|
+
"""刷新程序"""
|
40
|
+
for es in range(4):
|
41
|
+
try:
|
42
|
+
print(f'正在刷新 >>>{filename}')
|
43
|
+
self.pbi(path=newfile)
|
44
|
+
print('文件刷新 >>>' + filename)
|
45
|
+
break
|
46
|
+
except Exception as e:
|
47
|
+
print(e)
|
48
|
+
print('报错的文件 >>>' + filename + ' >> ' + str(es + 1))
|
49
|
+
|
50
|
+
def refresh_excel(self):
|
51
|
+
# 刷新 excel
|
52
|
+
if not os.path.exists(self.excel_path):
|
53
|
+
print(f'{self.excel_path}: Excel file not found. ')
|
54
|
+
return
|
55
|
+
with open(self.excel_path, 'r', encoding='utf-8') as f:
|
56
|
+
content = f.readlines()
|
57
|
+
content = [item.strip() for item in content if not item.strip().startswith('#')]
|
58
|
+
excel_list = [item for item in content if item]
|
59
|
+
|
60
|
+
if not excel_list:
|
61
|
+
return
|
62
|
+
for filename in excel_list:
|
63
|
+
if filename.endswith('.xlsx'):
|
64
|
+
try:
|
65
|
+
print(f'正在刷新 >>>{filename}')
|
66
|
+
path = os.path.join(top_path, self.run_py_path, filename) # 拼接文件路径
|
67
|
+
xlapp = win32com.client.Dispatch('Excel.Application') # 创建Excel程序App
|
68
|
+
xlapp.Visible = False # 窗口是否可见
|
69
|
+
xlapp.DisplayAlerts = False # 是否显示警告信息
|
70
|
+
wb = xlapp.Workbooks.Open(path)
|
71
|
+
conjuncts = wb.Connections.Count # 统计工作簿含有多少外部链接
|
72
|
+
if conjuncts == 0:
|
73
|
+
wb.Close(SaveChanges=False)
|
74
|
+
xlapp.Quit()
|
75
|
+
else:
|
76
|
+
time.sleep(2)
|
77
|
+
wb.RefreshAll()
|
78
|
+
xlapp.CalculateUntilAsyncQueriesDone()
|
79
|
+
time.sleep(2)
|
80
|
+
wb.Save()
|
81
|
+
wb.Close(SaveChanges=True)
|
82
|
+
xlapp.Quit()
|
83
|
+
print('文件刷新 >>>' + filename)
|
84
|
+
except Exception as e:
|
85
|
+
print(e)
|
86
|
+
|
87
|
+
def refresh_excel2(self, excel_file):
|
88
|
+
# 刷新 excel
|
89
|
+
if excel_file.endswith('.xlsx'):
|
90
|
+
try:
|
91
|
+
print(f'正在刷新 >>>{excel_file}')
|
92
|
+
xlapp = win32com.client.Dispatch('Excel.Application') # 创建Excel程序App
|
93
|
+
xlapp.Visible = False # 窗口是否可见
|
94
|
+
xlapp.DisplayAlerts = False # 是否显示警告信息
|
95
|
+
wb = xlapp.Workbooks.Open(excel_file)
|
96
|
+
conjuncts = wb.Connections.Count # 统计工作簿含有多少外部链接
|
97
|
+
if conjuncts == 0:
|
98
|
+
wb.Close(SaveChanges=False)
|
99
|
+
xlapp.Quit()
|
100
|
+
else:
|
101
|
+
time.sleep(2)
|
102
|
+
wb.RefreshAll()
|
103
|
+
xlapp.CalculateUntilAsyncQueriesDone()
|
104
|
+
time.sleep(2)
|
105
|
+
wb.Save()
|
106
|
+
wb.Close(SaveChanges=True)
|
107
|
+
xlapp.Quit()
|
108
|
+
print('文件刷新 >>>' + excel_file)
|
109
|
+
except Exception as e:
|
110
|
+
print(e)
|
111
|
+
|
112
|
+
def pbi(self, path, _timeout=300):
|
113
|
+
"""
|
114
|
+
这是原本属于独立的库模块: pbix_refresh
|
115
|
+
path: pbi文件路径
|
116
|
+
_timeout: 刷新等待时间
|
117
|
+
如果连接失败,请将 power bi 文件名的特殊字符(空格等)去掉或改为英文文件名试试
|
118
|
+
"""
|
119
|
+
# 关闭已打开的 power bi进程
|
120
|
+
for proc in psutil.process_iter():
|
121
|
+
if proc.name() == self.procname:
|
122
|
+
proc.kill()
|
123
|
+
time.sleep(1)
|
124
|
+
|
125
|
+
# 启动 Power bi
|
126
|
+
os.system('start "" "' + path + '"')
|
127
|
+
time.sleep(5)
|
128
|
+
|
129
|
+
# 通过 connect 方法连接进程
|
130
|
+
app = Application(backend='uia').connect(path=self.procname)
|
131
|
+
# title_re可以通过正则表达式连接:".*Power BI Desktop", 仅限 2023年9月之前的 Power bi版本
|
132
|
+
# 2023年10月之后的版本没有此窗口后缀, 因此需用文件名找窗口
|
133
|
+
# 如果同时打开了其他同名的文件(非 power bi文件时), 可能会引发错误
|
134
|
+
_filename = os.path.splitext(os.path.basename(path))[0] # 文件名不含后缀
|
135
|
+
win = app.window(title_re=f'{_filename}.*?') # 连接 pbi 窗口
|
136
|
+
time.sleep(10)
|
137
|
+
# win.print_control_identifiers() # 打印窗口全部信息, 推荐使用 inspect 开发工具查询窗口句柄信息
|
138
|
+
num = 0
|
139
|
+
while True:
|
140
|
+
try:
|
141
|
+
win['刷新'].wait("enabled", timeout=_timeout)
|
142
|
+
time.sleep(3)
|
143
|
+
win['刷新'].click()
|
144
|
+
break
|
145
|
+
except:
|
146
|
+
print(f'{path}, 未识别窗口句柄, 连接超时')
|
147
|
+
num += 1
|
148
|
+
if num > 1:
|
149
|
+
break
|
150
|
+
|
151
|
+
num = 0
|
152
|
+
while True:
|
153
|
+
try:
|
154
|
+
win['保存'].wait("enabled", timeout=_timeout) # timeout 通过"保存"按键状态, 等待刷新窗口关闭, 时间不要设置太短
|
155
|
+
time.sleep(3)
|
156
|
+
win['保存'].click()
|
157
|
+
break
|
158
|
+
except:
|
159
|
+
print(f'{path}, 未识别窗口句柄, 文件未保存')
|
160
|
+
num += 1
|
161
|
+
if num > 1:
|
162
|
+
break
|
163
|
+
# win.type_keys("^s")
|
164
|
+
win.wait("enabled", timeout=15)
|
165
|
+
win.close()
|
166
|
+
|
167
|
+
# 关闭进程
|
168
|
+
for proc in psutil.process_iter():
|
169
|
+
if proc.name() == self.procname:
|
170
|
+
proc.kill()
|
171
|
+
|
172
|
+
|
173
|
+
if __name__ == '__main__':
|
174
|
+
# r = RefreshAll()
|
175
|
+
# # r.refresh_pbix()
|
176
|
+
# r.refresh_excel()
|
177
|
+
pass
|
@@ -1,17 +1,17 @@
|
|
1
1
|
mdbq/__init__.py,sha256=Il5Q9ATdX8yXqVxtP_nYqUhExzxPC_qk_WXQ_4h0exg,16
|
2
2
|
mdbq/__version__.py,sha256=y9Mp_8x0BCZSHsdLT_q5tX9wZwd5QgqrSIENLrb6vXA,62
|
3
3
|
mdbq/aggregation/__init__.py,sha256=EeDqX2Aml6SPx8363J-v1lz0EcZtgwIBYyCJV6CcEDU,40
|
4
|
-
mdbq/aggregation/aggregation.py,sha256=
|
4
|
+
mdbq/aggregation/aggregation.py,sha256=98pECXV6yw7XSjoLnJBgHIQWM2s2aaB8ii5qNebAI7o,75872
|
5
5
|
mdbq/aggregation/df_types.py,sha256=U9i3q2eRPTDY8qAPTw7irzu-Tlg4CIySW9uYro81wdk,8125
|
6
6
|
mdbq/aggregation/mysql_types.py,sha256=DQYROALDiwjJzjhaJfIIdnsrNs11i5BORlj_v6bp67Y,11062
|
7
7
|
mdbq/aggregation/optimize_data.py,sha256=Wis40oL04M7E1pkvgNPjyVFAUe-zgjimjIVAikxYY8Y,4418
|
8
|
-
mdbq/aggregation/query_data.py,sha256=
|
8
|
+
mdbq/aggregation/query_data.py,sha256=h8AHq0v8xvsGjqoCZkAH1ZXZ3n05Q-JETVR6WDWzCyg,82334
|
9
9
|
mdbq/bdup/__init__.py,sha256=AkhsGk81SkG1c8FqDH5tRq-8MZmFobVbN60DTyukYTY,28
|
10
10
|
mdbq/bdup/bdup.py,sha256=LAV0TgnQpc-LB-YuJthxb0U42_VkPidzQzAagan46lU,4234
|
11
11
|
mdbq/clean/__init__.py,sha256=A1d6x3L27j4NtLgiFV5TANwEkLuaDfPHDQNrPBbNWtU,41
|
12
12
|
mdbq/clean/data_clean.py,sha256=ZJOTT0sNWP85x4pJl39UZBwN4Bnf8Ao-iVOJNiiRPEE,103996
|
13
13
|
mdbq/company/__init__.py,sha256=qz8F_GsP_pMB5PblgJAUAMjasuZbOEp3qQOCB39E8f0,21
|
14
|
-
mdbq/company/copysh.py,sha256=
|
14
|
+
mdbq/company/copysh.py,sha256=tHXG1qgJeFtBaVrGeWkI970hRcJkaYFR5eFOXPZ5tbk,18936
|
15
15
|
mdbq/company/home_sh.py,sha256=42CZ2tZIXHLl2mOl2gk2fZnjH2IHh1VJ1s3qHABjonY,18021
|
16
16
|
mdbq/config/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
|
17
17
|
mdbq/config/get_myconf.py,sha256=cmNvsyoNa0RbZ9FOTjSd3jyyGwkxjUo0phvdHbGlrms,6010
|
@@ -26,7 +26,7 @@ mdbq/mongo/__init__.py,sha256=SILt7xMtQIQl_m-ik9WLtJSXIVf424iYgCfE_tnQFbw,13
|
|
26
26
|
mdbq/mongo/mongo.py,sha256=v9qvrp6p1ZRWuPpbSilqveiE0FEcZF7U5xUPI0RN4xs,31880
|
27
27
|
mdbq/mysql/__init__.py,sha256=A_DPJyAoEvTSFojiI2e94zP0FKtCkkwKP1kYUCSyQzo,11
|
28
28
|
mdbq/mysql/mysql.py,sha256=KJfbe17lcPTfcKdGufW6b5ZHiYHiPSHFvugPNTm8n2M,46645
|
29
|
-
mdbq/mysql/s_query.py,sha256=
|
29
|
+
mdbq/mysql/s_query.py,sha256=37GGHzRpycfUjsYEoQgDpdEs9JwjW-LxFXnGwwP2b2Q,8403
|
30
30
|
mdbq/mysql/year_month_day.py,sha256=VgewoE2pJxK7ErjfviL_SMTN77ki8GVbTUcao3vFUCE,1523
|
31
31
|
mdbq/other/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
|
32
32
|
mdbq/other/porxy.py,sha256=UHfgEyXugogvXgsG68a7QouUCKaohTKKkI4RN-kYSdQ,4961
|
@@ -35,9 +35,10 @@ mdbq/other/sku_picture.py,sha256=vHHnajaS6Nz2sEduENihEUY_ZMhyBuQO7WuzrXSDSXM,481
|
|
35
35
|
mdbq/other/ua_sj.py,sha256=JuVYzc_5QZ9s_oQSrTHVKkQv4S_7-CWx4oIKOARn_9U,22178
|
36
36
|
mdbq/pbix/__init__.py,sha256=Trtfaynu9RjoTyLLYBN2xdRxTvm_zhCniUkVTAYwcjo,24
|
37
37
|
mdbq/pbix/pbix_refresh.py,sha256=JUjKW3bNEyoMVfVfo77UhguvS5AWkixvVhDbw4_MHco,2396
|
38
|
-
mdbq/pbix/refresh_all.py,sha256=
|
38
|
+
mdbq/pbix/refresh_all.py,sha256=M8g42JEJuKnSgugHIG9ZkLXrm3KPHYRKi2Uv0XYlKnE,5499
|
39
|
+
mdbq/pbix/refresh_all_old.py,sha256=_pq3WSQ728GPtEG5pfsZI2uTJhU8D6ra-htIk1JXYzw,7192
|
39
40
|
mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
|
40
|
-
mdbq-2.
|
41
|
-
mdbq-2.
|
42
|
-
mdbq-2.
|
43
|
-
mdbq-2.
|
41
|
+
mdbq-2.2.0.dist-info/METADATA,sha256=1jOdpjxjlFyRAFFoFUYXFOa_eNuIT4-HcaZT5evltoc,245
|
42
|
+
mdbq-2.2.0.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
|
43
|
+
mdbq-2.2.0.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
|
44
|
+
mdbq-2.2.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|