mdbq 0.0.8__py3-none-any.whl → 0.1.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 +5 -72
- mdbq/dataframe/__init__.py +4 -0
- mdbq/dataframe/converter.py +57 -0
- mdbq/mongo/mongo.py +11 -53
- mdbq/mysql/mysql.py +3 -37
- {mdbq-0.0.8.dist-info → mdbq-0.1.0.dist-info}/METADATA +1 -1
- {mdbq-0.0.8.dist-info → mdbq-0.1.0.dist-info}/RECORD +9 -7
- {mdbq-0.0.8.dist-info → mdbq-0.1.0.dist-info}/WHEEL +0 -0
- {mdbq-0.0.8.dist-info → mdbq-0.1.0.dist-info}/top_level.txt +0 -0
mdbq/aggregation/aggregation.py
CHANGED
@@ -12,6 +12,7 @@ import json
|
|
12
12
|
from mdbq.mongo import mongo
|
13
13
|
from mdbq.mysql import mysql
|
14
14
|
from mdbq.config import get_myconf
|
15
|
+
from mdbq.dataframe import converter
|
15
16
|
import datetime
|
16
17
|
import time
|
17
18
|
import re
|
@@ -69,7 +70,8 @@ class DataTypes:
|
|
69
70
|
"""
|
70
71
|
if len(df) == 0:
|
71
72
|
return
|
72
|
-
|
73
|
+
cv = converter.DataFrameConverter()
|
74
|
+
df = cv.convert_df_cols(df=df) # 清理 dataframe 列名的不合规字符
|
73
75
|
dtypes = df.dtypes.apply(str).to_dict()
|
74
76
|
dtypes = {db_name: {collection_name: dtypes}}
|
75
77
|
|
@@ -111,42 +113,6 @@ class DataTypes:
|
|
111
113
|
self.datas.update(tips)
|
112
114
|
return self.datas[db_name][collection_name] # 返回 df 的 dtypes
|
113
115
|
|
114
|
-
def convert_df_cols(self, df):
|
115
|
-
"""
|
116
|
-
清理 dataframe 列名的不合规字符(mysql)
|
117
|
-
对数据类型进行转换(尝试将 object 类型转为 int 或 float)
|
118
|
-
"""
|
119
|
-
# dtypes = df.dtypes.apply(str).to_dict() # 将 dataframe 数据类型转为字典形式
|
120
|
-
df.replace([np.inf, -np.inf], 0, inplace=True) # 清理一些非法值
|
121
|
-
df.replace(to_replace=['\\N', '-', '--', '', 'nan'], value=0, regex=False, inplace=True) # 替换掉特殊字符
|
122
|
-
df.replace(to_replace=[','], value='', regex=True, inplace=True)
|
123
|
-
df.replace(to_replace=['="'], value='', regex=True, inplace=True) # ="和"不可以放在一起清洗, 因为有: id=86785565
|
124
|
-
df.replace(to_replace=['"'], value='', regex=True, inplace=True)
|
125
|
-
cols = df.columns.tolist()
|
126
|
-
for col in cols:
|
127
|
-
# df[col] = df[col].apply(lambda x: re.sub('[="]', '', str(x)) if '="' in str(x) else x)
|
128
|
-
# 百分比在某些数据库中不兼容, 转换百分比为小数
|
129
|
-
df[col] = df[col].apply(lambda x: float(float((str(x).rstrip("%"))) / 100) if str(x).endswith('%') and '~' not in str(x) else x)
|
130
|
-
# 尝试转换合适的数据类型
|
131
|
-
if df[col].dtype == 'object':
|
132
|
-
try:
|
133
|
-
df[col] = df[col].astype(int) # 尝试转换 int
|
134
|
-
except:
|
135
|
-
df[col] = df[col].astype('float64', errors='ignore') # 尝试转换 float, 报错则忽略
|
136
|
-
if df[col].dtype == 'float': # 对于小数类型, 保留 6 位小数
|
137
|
-
df[col] = df[col].apply(lambda x: round(float(x), 6) if x != 0 else x)
|
138
|
-
# 清理列名, 在 mysql 里面列名不能含有某些特殊字符
|
139
|
-
if '日期' in col or '时间' in col:
|
140
|
-
try:
|
141
|
-
df[col] = df[col].apply(lambda x: pd.to_datetime(x))
|
142
|
-
except:
|
143
|
-
pass
|
144
|
-
new_col = col.lower()
|
145
|
-
new_col = re.sub(r'[\',,()()/=<>+\-*^"’\[\]~#|&% .;]', '_', new_col)
|
146
|
-
df.rename(columns={col: new_col}, inplace=True)
|
147
|
-
df.fillna(0, inplace=True)
|
148
|
-
return df
|
149
|
-
|
150
116
|
def dtypes_to_file(self):
|
151
117
|
""" 保存为本地 json 文件 """
|
152
118
|
# print(self.datas)
|
@@ -801,40 +767,6 @@ class DatabaseUpdate:
|
|
801
767
|
df, db_name, collection_name = data['数据主体'], data['数据库名'], data['集合名称']
|
802
768
|
m.df_to_mysql(df=df, db_name=db_name, tabel_name=collection_name)
|
803
769
|
|
804
|
-
def convert_df_cols(self, df):
|
805
|
-
""""
|
806
|
-
清理 dataframe 列名的不合规字符(mysql)
|
807
|
-
对数据类型进行转换(尝试将 object 类型转为 int 或 float)
|
808
|
-
"""
|
809
|
-
# dtypes = df.dtypes.apply(str).to_dict() # 将 dataframe 数据类型转为字典形式
|
810
|
-
df.replace([np.inf, -np.inf], 0, inplace=True) # 清理一些非法值
|
811
|
-
|
812
|
-
cols = df.columns.tolist()
|
813
|
-
df.replace(to_replace=['\\N', '-', '--', '', 'nan'], value=0, regex=False, inplace=True) # 替换掉特殊字符
|
814
|
-
df.replace(to_replace=[','], value='', regex=True, inplace=True)
|
815
|
-
for col in cols:
|
816
|
-
# 百分比在某些数据库中不兼容, 转换百分比为小数
|
817
|
-
df[col] = df[col].apply(lambda x: float(float((str(x).rstrip("%"))) / 100) if str(x).endswith('%') and '~' not in str(x) else x)
|
818
|
-
# 尝试转换合适的数据类型
|
819
|
-
if df[col].dtype == 'object':
|
820
|
-
try:
|
821
|
-
df[col] = df[col].astype(int) # 尝试转换 int
|
822
|
-
except:
|
823
|
-
df[col] = df[col].astype('float64', errors='ignore') # 尝试转换 float, 报错则忽略
|
824
|
-
if df[col].dtype == 'float': # 对于小数类型, 保留 6 位小数
|
825
|
-
df[col] = df[col].apply(lambda x: round(float(x), 6) if x != 0 else x)
|
826
|
-
# 清理列名, 在 mysql 里面列名不能含有某些特殊字符
|
827
|
-
if '日期' in col or '时间' in col:
|
828
|
-
try:
|
829
|
-
df[col] = df[col].apply(lambda x: pd.to_datetime(x))
|
830
|
-
except:
|
831
|
-
pass
|
832
|
-
new_col = col.lower()
|
833
|
-
new_col = re.sub(r'[\',,()()/=<>+\-*^"’\[\]~#|&% .;]', '_', new_col)
|
834
|
-
df.rename(columns={col: new_col}, inplace=True)
|
835
|
-
df.fillna(0, inplace=True)
|
836
|
-
return df
|
837
|
-
|
838
770
|
def new_unzip(self, path=None, is_move=None):
|
839
771
|
"""
|
840
772
|
{解压并移除zip文件}
|
@@ -1020,7 +952,8 @@ def upload():
|
|
1020
952
|
df = pd.read_csv(os.path.join(root, name), encoding='utf-8_sig', header=0, na_filter=False)
|
1021
953
|
if len(df) == 0:
|
1022
954
|
continue
|
1023
|
-
|
955
|
+
cv = converter.DataFrameConverter()
|
956
|
+
df = cv.convert_df_cols(df=df) # 清理列名和 df 中的非法字符
|
1024
957
|
try:
|
1025
958
|
df = df.astype(dtypes)
|
1026
959
|
except Exception as e:
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# -*- coding:utf-8 -*-
|
2
|
+
import pandas as pd
|
3
|
+
import numpy as np
|
4
|
+
import re
|
5
|
+
|
6
|
+
|
7
|
+
class DataFrameConverter(object):
|
8
|
+
def __init__(self, df=pd.DataFrame({})):
|
9
|
+
self.df = df
|
10
|
+
|
11
|
+
def convert_df_cols(self, df=pd.DataFrame({})):
|
12
|
+
"""
|
13
|
+
清理 dataframe 列名的不合规字符(mysql)
|
14
|
+
对数据类型进行转换(尝试将 object 类型转为 int 或 float)
|
15
|
+
"""
|
16
|
+
if len(df) == 0:
|
17
|
+
df = self.df
|
18
|
+
if len(df) == 0:
|
19
|
+
return
|
20
|
+
# dtypes = df.dtypes.apply(str).to_dict() # 将 dataframe 数据类型转为字典形式
|
21
|
+
df.replace([np.inf, -np.inf], 0, inplace=True) # 清理一些非法值
|
22
|
+
df.replace(to_replace=['\\N', '-', '--', '', 'nan'], value=0, regex=False, inplace=True) # 替换掉特殊字符
|
23
|
+
df.replace(to_replace=[','], value='', regex=True, inplace=True)
|
24
|
+
df.replace(to_replace=['="'], value='', regex=True, inplace=True) # ="和"不可以放在一起清洗, 因为有: id=86785565
|
25
|
+
df.replace(to_replace=['"'], value='', regex=True, inplace=True)
|
26
|
+
cols = df.columns.tolist()
|
27
|
+
for col in cols:
|
28
|
+
# df[col] = df[col].apply(lambda x: re.sub('[="]', '', str(x)) if '="' in str(x) else x)
|
29
|
+
# 百分比在某些数据库中不兼容, 转换百分比为小数
|
30
|
+
df[col] = df[col].apply(lambda x: float(float((str(x).rstrip("%"))) / 100) if str(x).endswith('%') and '~' not in str(x) else x)
|
31
|
+
# 尝试转换合适的数据类型
|
32
|
+
if df[col].dtype == 'object':
|
33
|
+
try:
|
34
|
+
df[col] = df[col].astype(int) # 尝试转换 int
|
35
|
+
except:
|
36
|
+
df[col] = df[col].astype('float64', errors='ignore') # 尝试转换 float, 报错则忽略
|
37
|
+
if df[col].dtype == 'float': # 对于小数类型, 保留 6 位小数
|
38
|
+
df[col] = df[col].apply(lambda x: round(float(x), 6) if x != 0 else x)
|
39
|
+
# 清理列名, 在 mysql 里面列名不能含有某些特殊字符
|
40
|
+
if '日期' in col or '时间' in col:
|
41
|
+
try:
|
42
|
+
df[col] = df[col].apply(lambda x: pd.to_datetime(x))
|
43
|
+
except:
|
44
|
+
pass
|
45
|
+
new_col = col.lower()
|
46
|
+
new_col = re.sub(r'[\',,()()/=<>+\-*^"’\[\]~#|&% .;]', '_', new_col)
|
47
|
+
df.rename(columns={col: new_col}, inplace=True)
|
48
|
+
df.fillna(0, inplace=True)
|
49
|
+
return df
|
50
|
+
|
51
|
+
|
52
|
+
if __name__ == '__main__':
|
53
|
+
df = pd.DataFrame(np.random.randn(5, 3), columns=['a', 'b', 'c'])
|
54
|
+
converter = DataFrameConverter()
|
55
|
+
df = converter.convert_df_cols(df)
|
56
|
+
print(df['a'].dtype)
|
57
|
+
print(df)
|
mdbq/mongo/mongo.py
CHANGED
@@ -10,6 +10,7 @@ import pymongo
|
|
10
10
|
from functools import wraps
|
11
11
|
from concurrent.futures import ThreadPoolExecutor
|
12
12
|
from mdbq.config import get_myconf
|
13
|
+
from mdbq.dataframe import converter
|
13
14
|
|
14
15
|
warnings.filterwarnings('ignore')
|
15
16
|
|
@@ -209,15 +210,6 @@ class DownMongo:
|
|
209
210
|
else:
|
210
211
|
print(f'{now}正在下载数据 ({self.host}) {self.db_name}: {self.collection_name}, 数据区间: {self.start_date} ~ {self.end_date}')
|
211
212
|
|
212
|
-
# self.start_date = datetime.datetime.now() - datetime.timedelta(days=self.days)
|
213
|
-
# query = { # 读取数据库中指定时间区间的数据
|
214
|
-
# '日期':
|
215
|
-
# {
|
216
|
-
# '$gte': self.start_date,
|
217
|
-
# '$lte': self.end_date
|
218
|
-
# },
|
219
|
-
# }
|
220
|
-
# _df = pd.DataFrame((list(_collection.find(query)))) # 将数据转换为 dataframe
|
221
213
|
if not self.start_date:
|
222
214
|
self.start_date = datetime.datetime.now() - datetime.timedelta(days=self.days)
|
223
215
|
self.end_date = datetime.datetime.now()
|
@@ -236,17 +228,16 @@ class DownMongo:
|
|
236
228
|
# print(doc)
|
237
229
|
datas.append(doc)
|
238
230
|
_df = pd.DataFrame(datas)
|
231
|
+
if len(_df) == 0:
|
232
|
+
print(f'查询的数据量: {len(_df)}, 森么都米有花生')
|
233
|
+
self.client.close()
|
234
|
+
return
|
235
|
+
if '_id' in _df.columns.tolist():
|
236
|
+
_df.drop('_id', axis=1, inplace=True)
|
239
237
|
|
240
|
-
for col in _df.columns.tolist(): # 保存之前尝试转换数据类型
|
241
|
-
if '日期' in col:
|
242
|
-
_df[col] = _df[col].astype(str).apply(lambda x: ''.join(re.findall(r'(\d{4}-\d{2}-\d{2})', x)))
|
243
|
-
_df[col] = pd.to_datetime(_df[col], format='%Y-%m-%d', errors='ignore') # 转换日期列
|
244
|
-
elif '_id' in col:
|
245
|
-
# _df['_id'] = _df['_id'].astype(str) # 将 '_id' 字段转换为字符串,因为它是一个 ObjectId 对象
|
246
|
-
_df.drop('_id', axis=1, inplace=True)
|
247
|
-
else:
|
248
|
-
_df[col] = pd.to_numeric(_df[col], errors='ignore')
|
249
238
|
print(f'查询的数据量: {len(_df)}')
|
239
|
+
cv = converter.DataFrameConverter()
|
240
|
+
_df = cv.convert_df_cols(_df)
|
250
241
|
s_date = re.findall(r'(\d{4}-\d{2}-\d{2})', str(_df['日期'].values.min()))[0]
|
251
242
|
e_date = re.findall(r'(\d{4}-\d{2}-\d{2})', str(_df['日期'].values.max()))[0]
|
252
243
|
if not file_type.startswith('.'):
|
@@ -420,7 +411,8 @@ class UploadMongo:
|
|
420
411
|
start_date = None
|
421
412
|
end_date = None
|
422
413
|
|
423
|
-
|
414
|
+
cv = converter.DataFrameConverter()
|
415
|
+
df = cv.convert_df_cols(df=df) # 清理列名中的不合规字符
|
424
416
|
if '日期' in df.columns.tolist():
|
425
417
|
# df['日期'] = df['日期'].apply(lambda x: pd.to_datetime(x))
|
426
418
|
collections.create_index([('日期', -1)], background=True) # 必须, 创建索引, background 不阻塞
|
@@ -469,40 +461,6 @@ class UploadMongo:
|
|
469
461
|
|
470
462
|
self.client.close() #
|
471
463
|
|
472
|
-
def convert_df_cols(self, df):
|
473
|
-
"""
|
474
|
-
清理 dataframe 列名的不合规字符(mysql)
|
475
|
-
对数据类型进行转换(尝试将 object 类型转为 int 或 float)
|
476
|
-
"""
|
477
|
-
# dtypes = df.dtypes.apply(str).to_dict() # 将 dataframe 数据类型转为字典形式
|
478
|
-
df.replace([np.inf, -np.inf], 0, inplace=True) # 清理一些非法值
|
479
|
-
|
480
|
-
cols = df.columns.tolist()
|
481
|
-
df.replace(to_replace=['\\N', '-', '--', '', 'nan'], value=0, regex=False, inplace=True) # 替换掉特殊字符
|
482
|
-
df.replace(to_replace=[','], value='', regex=True, inplace=True)
|
483
|
-
for col in cols:
|
484
|
-
# 百分比在某些数据库中不兼容, 转换百分比为小数
|
485
|
-
df[col] = df[col].apply(lambda x: float(float((str(x).rstrip("%"))) / 100) if str(x).endswith('%') and '~' not in str(x) else x)
|
486
|
-
# 尝试转换合适的数据类型
|
487
|
-
if df[col].dtype == 'object':
|
488
|
-
try:
|
489
|
-
df[col] = df[col].astype(int) # 尝试转换 int
|
490
|
-
except:
|
491
|
-
df[col] = df[col].astype('float64', errors='ignore') # 尝试转换 float, 报错则忽略
|
492
|
-
if df[col].dtype == 'float': # 对于小数类型, 保留 6 位小数
|
493
|
-
df[col] = df[col].apply(lambda x: round(float(x), 6) if x != 0 else x)
|
494
|
-
# 清理列名, 在 mysql 里面列名不能含有某些特殊字符
|
495
|
-
if '日期' in col or '时间' in col:
|
496
|
-
try:
|
497
|
-
df[col] = df[col].apply(lambda x: pd.to_datetime(x))
|
498
|
-
except:
|
499
|
-
pass
|
500
|
-
new_col = col.lower()
|
501
|
-
new_col = re.sub(r'[\',,()()/=<>+\-*^"’\[\]~#|&% .;]', '_', new_col)
|
502
|
-
df.rename(columns={col: new_col}, inplace=True)
|
503
|
-
df.fillna(0, inplace=True)
|
504
|
-
return df
|
505
|
-
|
506
464
|
|
507
465
|
class OptimizeDatas:
|
508
466
|
"""
|
mdbq/mysql/mysql.py
CHANGED
@@ -12,6 +12,7 @@ from sqlalchemy import create_engine
|
|
12
12
|
import os
|
13
13
|
import calendar
|
14
14
|
from mdbq.config import get_myconf
|
15
|
+
from mdbq.dataframe import converter
|
15
16
|
|
16
17
|
warnings.filterwarnings('ignore')
|
17
18
|
|
@@ -67,7 +68,8 @@ class MysqlUpload:
|
|
67
68
|
"""
|
68
69
|
db_name = re.sub(r'[\',,()()/=<>+\-*^"’\[\]~#|&% .]', '_', db_name)
|
69
70
|
tabel_name = re.sub(r'[\',,()()/=<>+\-*^"’\[\]~#|&% .]', '_', tabel_name)
|
70
|
-
|
71
|
+
cv = converter.DataFrameConverter()
|
72
|
+
df = cv.convert_df_cols(df=df) # 清理列名中的不合规字符
|
71
73
|
|
72
74
|
connection = pymysql.connect(**self.config) # 连接数据库
|
73
75
|
try:
|
@@ -182,42 +184,6 @@ class MysqlUpload:
|
|
182
184
|
else:
|
183
185
|
return 'mediumtext'
|
184
186
|
|
185
|
-
|
186
|
-
def convert_df_cols(self, df):
|
187
|
-
"""
|
188
|
-
清理 dataframe 列名的不合规字符(mysql)
|
189
|
-
对数据类型进行转换(尝试将 object 类型转为 int 或 float)
|
190
|
-
"""
|
191
|
-
# dtypes = df.dtypes.apply(str).to_dict() # 将 dataframe 数据类型转为字典形式
|
192
|
-
df.replace([np.inf, -np.inf], 0, inplace=True) # 清理一些非法值
|
193
|
-
|
194
|
-
cols = df.columns.tolist()
|
195
|
-
df.replace(to_replace=['\\N', '-', '--', '', 'nan'], value=0, regex=False, inplace=True) # 替换掉特殊字符
|
196
|
-
df.replace(to_replace=[','], value='', regex=True, inplace=True)
|
197
|
-
for col in cols:
|
198
|
-
# 百分比在某些数据库中不兼容, 转换百分比为小数
|
199
|
-
df[col] = df[col].apply(lambda x: float(float((str(x).rstrip("%"))) / 100) if str(x).endswith('%') and '~' not in str(x) else x)
|
200
|
-
# 尝试转换合适的数据类型
|
201
|
-
if df[col].dtype == 'object':
|
202
|
-
try:
|
203
|
-
df[col] = df[col].astype(int) # 尝试转换 int
|
204
|
-
except:
|
205
|
-
df[col] = df[col].astype('float64', errors='ignore') # 尝试转换 float, 报错则忽略
|
206
|
-
if df[col].dtype == 'float': # 对于小数类型, 保留 6 位小数
|
207
|
-
df[col] = df[col].apply(lambda x: round(float(x), 6) if x != 0 else x)
|
208
|
-
# 清理列名, 在 mysql 里面列名不能含有某些特殊字符
|
209
|
-
if '日期' in col or '时间' in col:
|
210
|
-
try:
|
211
|
-
df[col] = df[col].apply(lambda x: pd.to_datetime(x))
|
212
|
-
except:
|
213
|
-
pass
|
214
|
-
new_col = col.lower()
|
215
|
-
new_col = re.sub(r'[\',,()()/=<>+\-*^"’\[\]~#|&% .;]', '_', new_col)
|
216
|
-
df.rename(columns={col: new_col}, inplace=True)
|
217
|
-
df.fillna(0, inplace=True)
|
218
|
-
return df
|
219
|
-
|
220
|
-
|
221
187
|
def upload_pandas(self, update_path, db_name, days=None):
|
222
188
|
"""
|
223
189
|
专门用来上传 pandas数据源的全部文件, 跳过 '其他数据' or '京东数据集'
|
@@ -1,7 +1,7 @@
|
|
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=EbV1f3ExlBcbtAWE1R5qcNx5AE9NCZL3ENMqVCy5zHg,55618
|
5
5
|
mdbq/aggregation/query_data.py,sha256=9E4dbeQAq7r1srlszP27X3jFiKtMmFc6lP965GHjQms,13368
|
6
6
|
mdbq/bdup/__init__.py,sha256=AkhsGk81SkG1c8FqDH5tRq-8MZmFobVbN60DTyukYTY,28
|
7
7
|
mdbq/bdup/bdup.py,sha256=LAV0TgnQpc-LB-YuJthxb0U42_VkPidzQzAagan46lU,4234
|
@@ -12,12 +12,14 @@ mdbq/company/copysh.py,sha256=0exynzeqf85gCBQXAgKycVxddMhr0TjkFcBP_NK0QTA,15609
|
|
12
12
|
mdbq/config/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
|
13
13
|
mdbq/config/get_myconf.py,sha256=q6Pylsnh4-MsHP9JcX8IdlnGVWikz9hio1HI_qh6Wvs,6171
|
14
14
|
mdbq/config/update_conf.py,sha256=YjGjjRchu5BcrmLJkoLjHEF2TbGOmsgCWX4LroXOYWQ,3455
|
15
|
+
mdbq/dataframe/__init__.py,sha256=2HtCN8AdRj53teXDqzysC1h8aPL-mMFy561ESmhehGQ,22
|
16
|
+
mdbq/dataframe/converter.py,sha256=VLG6Y0Ca_OkgpVkHDQU6AHSxGqISx6GsGiyDGHkXq0g,2668
|
15
17
|
mdbq/log/__init__.py,sha256=Mpbrav0s0ifLL7lVDAuePEi1hJKiSHhxcv1byBKDl5E,15
|
16
18
|
mdbq/log/mylogger.py,sha256=oaT7Bp-Hb9jZt52seP3ISUuxVcI19s4UiqTeouScBO0,3258
|
17
19
|
mdbq/mongo/__init__.py,sha256=SILt7xMtQIQl_m-ik9WLtJSXIVf424iYgCfE_tnQFbw,13
|
18
|
-
mdbq/mongo/mongo.py,sha256=
|
20
|
+
mdbq/mongo/mongo.py,sha256=AK028yQWPajf_A-PYY-NJTfWiGQJDpBwPY3aS6cOcHk,30431
|
19
21
|
mdbq/mysql/__init__.py,sha256=A_DPJyAoEvTSFojiI2e94zP0FKtCkkwKP1kYUCSyQzo,11
|
20
|
-
mdbq/mysql/mysql.py,sha256=
|
22
|
+
mdbq/mysql/mysql.py,sha256=HX3keNO-Hbpra3XNJtWbBwsD7pLHiKfM4ZQaSBksAkk,28149
|
21
23
|
mdbq/mysql/s_query.py,sha256=bRnW8Cpy4fSsbMhzGCvjiK2kin9uamVumJC3nLAyjMg,5213
|
22
24
|
mdbq/mysql/year_month_day.py,sha256=VgewoE2pJxK7ErjfviL_SMTN77ki8GVbTUcao3vFUCE,1523
|
23
25
|
mdbq/other/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
|
@@ -28,7 +30,7 @@ mdbq/pbix/__init__.py,sha256=Trtfaynu9RjoTyLLYBN2xdRxTvm_zhCniUkVTAYwcjo,24
|
|
28
30
|
mdbq/pbix/pbix_refresh.py,sha256=JUjKW3bNEyoMVfVfo77UhguvS5AWkixvVhDbw4_MHco,2396
|
29
31
|
mdbq/pbix/refresh_all.py,sha256=wulHs4rivf4Mi0Pii2QR5Nk9-TBcvSwnCB_WH9QULKE,5939
|
30
32
|
mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
|
31
|
-
mdbq-0.0.
|
32
|
-
mdbq-0.0.
|
33
|
-
mdbq-0.0.
|
34
|
-
mdbq-0.0.
|
33
|
+
mdbq-0.1.0.dist-info/METADATA,sha256=627YqHp57NZ-o4gylzObjtKU3DldI5Dl4rNpldzb8JU,245
|
34
|
+
mdbq-0.1.0.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
|
35
|
+
mdbq-0.1.0.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
|
36
|
+
mdbq-0.1.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|