mdbq 1.0.8__tar.gz → 1.1.0__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.
- {mdbq-1.0.8 → mdbq-1.1.0}/PKG-INFO +1 -1
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/aggregation/mysql_types.py +7 -7
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/mysql/mysql.py +44 -12
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq.egg-info/PKG-INFO +1 -1
- {mdbq-1.0.8 → mdbq-1.1.0}/setup.py +1 -1
- {mdbq-1.0.8 → mdbq-1.1.0}/README.txt +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/__init__.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/__version__.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/aggregation/__init__.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/aggregation/aggregation.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/aggregation/df_types.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/aggregation/optimize_data.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/aggregation/query_data.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/bdup/__init__.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/bdup/bdup.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/clean/__init__.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/clean/data_clean.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/company/__init__.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/company/copysh.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/config/__init__.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/config/get_myconf.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/config/products.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/config/set_support.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/config/update_conf.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/dataframe/__init__.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/dataframe/converter.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/log/__init__.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/log/mylogger.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/mongo/__init__.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/mongo/mongo.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/mysql/__init__.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/mysql/data_types_/345/215/263/345/260/206/345/210/240/351/231/244.py" +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/mysql/s_query.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/mysql/year_month_day.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/other/__init__.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/other/porxy.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/other/pov_city.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/other/ua_sj.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/pbix/__init__.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/pbix/pbix_refresh.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/pbix/refresh_all.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq/spider/__init__.py +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq.egg-info/SOURCES.txt +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq.egg-info/dependency_links.txt +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/mdbq.egg-info/top_level.txt +0 -0
- {mdbq-1.0.8 → mdbq-1.1.0}/setup.cfg +0 -0
@@ -133,19 +133,19 @@ class DataTypes:
|
|
133
133
|
if cl in self.datas.keys():
|
134
134
|
if db_name in list(self.datas[cl].keys()):
|
135
135
|
if table_name in list(self.datas[cl][db_name].keys()):
|
136
|
-
return self.datas[cl][db_name][table_name]
|
136
|
+
return self.datas[cl][db_name][table_name], None, None, None
|
137
137
|
else:
|
138
138
|
print(f'不存在的集合名信息: {table_name}, 文件位置: {self.json_file}')
|
139
|
-
mysql_all_dtypes(db_name=db_name, table_name=table_name) # 更新一个表的 dtypes
|
140
|
-
return {}
|
139
|
+
# mysql_all_dtypes(db_name=db_name, table_name=table_name) # 更新一个表的 dtypes
|
140
|
+
return {}, cl, db_name, table_name
|
141
141
|
else:
|
142
142
|
print(f'不存在的数据库信息: {db_name}, 文件位置: {self.json_file}')
|
143
|
-
mysql_all_dtypes(db_name=db_name) # 更新一个数据库的 dtypes
|
144
|
-
return {}
|
143
|
+
# mysql_all_dtypes(db_name=db_name) # 更新一个数据库的 dtypes
|
144
|
+
return {}, cl, db_name, None
|
145
145
|
else:
|
146
146
|
print(f'不存在的数据分类: {cl}, 文件位置: {self.json_file}')
|
147
|
-
mysql_all_dtypes() # 更新所有数据库所有数据表的 dtypes 信息到本地 json
|
148
|
-
return {}
|
147
|
+
# mysql_all_dtypes() # 更新所有数据库所有数据表的 dtypes 信息到本地 json
|
148
|
+
return {}, cl, None, None # 返回这些结果的目的是等添加完列再写 json 文件才能读到 types 信息
|
149
149
|
|
150
150
|
|
151
151
|
def mysql_all_dtypes(db_name=None, table_name=None, path=None):
|
@@ -48,7 +48,7 @@ class MysqlUpload:
|
|
48
48
|
print(f'{db_name}: {table_name} 传入的 df 数据长度为0')
|
49
49
|
return
|
50
50
|
else:
|
51
|
-
print(f'{db_name}: {table_name} 传入的 df
|
51
|
+
print(f'{db_name}: {table_name} 传入的 df 不是有效的 dataframe 结构')
|
52
52
|
return
|
53
53
|
cv = converter.DataFrameConverter()
|
54
54
|
df = cv.convert_df_cols(df=df) # 清理 dataframe 非法值
|
@@ -82,7 +82,7 @@ class MysqlUpload:
|
|
82
82
|
print(f'创建 mysql 表: {table_name}')
|
83
83
|
|
84
84
|
# 2. 列数据类型转换,将 df 数据类型转换为 mysql 的数据类型
|
85
|
-
dtypes = self.convert_dtypes(df=df, db_name=db_name, table_name=table_name)
|
85
|
+
dtypes, cl, db_n, tb_n = self.convert_dtypes(df=df, db_name=db_name, table_name=table_name)
|
86
86
|
|
87
87
|
# 有特殊字符不需转义
|
88
88
|
sql = f"SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '{db_name}' AND TABLE_NAME = '{table_name}';"
|
@@ -109,6 +109,14 @@ class MysqlUpload:
|
|
109
109
|
pass
|
110
110
|
connection.commit() # 提交事务
|
111
111
|
|
112
|
+
# 返回这些结果的目的是等添加完列再写 json 文件才能读到 types 信息
|
113
|
+
if cl and db_n and tb_n:
|
114
|
+
mysql_types.mysql_all_dtypes(db_name=db_name, table_name=table_name) # 更新一个表的 dtypes
|
115
|
+
elif cl and db_n:
|
116
|
+
mysql_types.mysql_all_dtypes(db_name=db_name) # 更新一个数据库的 dtypes
|
117
|
+
elif cl:
|
118
|
+
mysql_types.mysql_all_dtypes() # 更新所有数据库所有数据表的 dtypes 信息到本地 json
|
119
|
+
|
112
120
|
# 4. 移除指定日期范围内的数据,仅限于聚合数据使用,其他情况不要设置
|
113
121
|
if drop_duplicates and '日期' in df.columns.tolist():
|
114
122
|
dates = df['日期'].values.tolist()
|
@@ -139,8 +147,8 @@ class MysqlUpload:
|
|
139
147
|
if not result: # 数据不存在则插入
|
140
148
|
sql = f"INSERT INTO `{table_name}` ({cols}) VALUES ({values});"
|
141
149
|
cursor.execute(sql)
|
142
|
-
except:
|
143
|
-
|
150
|
+
except Exception as e:
|
151
|
+
print(f'mysql -> df_to_mysql 报错: {e}')
|
144
152
|
connection.commit() # 提交事务
|
145
153
|
|
146
154
|
def convert_dtypes(self, df, db_name, table_name):
|
@@ -155,7 +163,7 @@ class MysqlUpload:
|
|
155
163
|
# path = set_support.SetSupport(dirname='support').dirname
|
156
164
|
d = mysql_types.DataTypes()
|
157
165
|
# 从本地文件中读取 dtype 信息
|
158
|
-
dtypes = d.load_dtypes(cl='mysql', db_name=db_name, table_name=table_name)
|
166
|
+
dtypes, cl, db_n, tb_n = d.load_dtypes(cl='mysql', db_name=db_name, table_name=table_name)
|
159
167
|
# 可能会因为没有 json 文件, 返回 None
|
160
168
|
if dtypes:
|
161
169
|
# 按照文件记录更新 dtypes
|
@@ -171,7 +179,7 @@ class MysqlUpload:
|
|
171
179
|
dtypes.update({col: self.convert_dtype_to_sql(df=df, col=col, dtype=df[col].dtype) for col in col_not_exist})
|
172
180
|
# 至此 df 中全部列类型已经转换完成
|
173
181
|
# 返回结果, 示例: {'上市年份': 'mediumtext', '商品id': 'mediumtext', '平台': 'mediumtext'}
|
174
|
-
return dtypes
|
182
|
+
return dtypes, cl, db_n, tb_n # 返回这些结果的目的是等添加完列再写 json 文件才能读到 types 信息
|
175
183
|
|
176
184
|
def convert_dtype_to_sql(self, df, col, dtype):
|
177
185
|
""" 按照以下规则转换DataFrame列的数据类型为 MYSQL 专有的数据类型 """
|
@@ -199,7 +207,29 @@ class MysqlUpload:
|
|
199
207
|
return 'mediumtext'
|
200
208
|
return 'INT'
|
201
209
|
elif dtype == 'float64':
|
202
|
-
|
210
|
+
# step = len(str(max(df[col].tolist()))) # 数字长度包含小数点
|
211
|
+
int_step = len(str(max(df[col].tolist())).split('.')[0]) # 整数位数长度
|
212
|
+
f_step = len(str(max(df[col].tolist())).split('.')[1]) # 小数位数长度
|
213
|
+
if int_step >= 12:
|
214
|
+
return 'mediumtext' # mysql 中不要使用 float 和 double 类型,会影响计算结果
|
215
|
+
elif int_step >= 8 and f_step >= 0:
|
216
|
+
return 'decimal(16, 2)'
|
217
|
+
elif int_step >= 6 and f_step >= 0:
|
218
|
+
return 'decimal(10, 2)'
|
219
|
+
elif int_step >= 4 and f_step >= 0:
|
220
|
+
return 'decimal(10, 2)'
|
221
|
+
elif int_step >= 2 and f_step >= 6:
|
222
|
+
return 'decimal(12, 4)'
|
223
|
+
elif int_step >= 2 and f_step >= 4:
|
224
|
+
return 'decimal(10, 4)'
|
225
|
+
elif int_step >= 2 and f_step >= 0:
|
226
|
+
return 'decimal(10, 2)'
|
227
|
+
elif int_step >= 1 and f_step >= 6:
|
228
|
+
return 'decimal(10, 6)'
|
229
|
+
elif int_step >= 1 and f_step >= 4:
|
230
|
+
return 'decimal(10, 4)'
|
231
|
+
else:
|
232
|
+
return 'decimal(10, 2)'
|
203
233
|
elif dtype == 'object':
|
204
234
|
return 'mediumtext'
|
205
235
|
else:
|
@@ -647,8 +677,8 @@ def download_datas(table_name, save_path, start_date):
|
|
647
677
|
df.to_csv(path, index=False, encoding='utf-8_sig', header=True)
|
648
678
|
|
649
679
|
|
650
|
-
def one_file_to_mysql(file, db_name, table_name):
|
651
|
-
username, password, host, port = get_myconf.select_config_values(target_service=
|
680
|
+
def one_file_to_mysql(file, db_name, table_name, target_service, database):
|
681
|
+
username, password, host, port = get_myconf.select_config_values(target_service=target_service, database=database)
|
652
682
|
|
653
683
|
df = pd.read_csv(file, encoding='utf-8_sig', header=0, na_filter=False)
|
654
684
|
m = MysqlUpload(username=username, password=password, host=host, port=port)
|
@@ -659,11 +689,13 @@ if __name__ == '__main__':
|
|
659
689
|
username, password, host, port = get_myconf.select_config_values(target_service='company', database='mysql')
|
660
690
|
print(username, password, host, port)
|
661
691
|
|
662
|
-
file = '/Users/xigua
|
692
|
+
file = '/Users/xigua/Downloads/余额查询.csv'
|
663
693
|
one_file_to_mysql(
|
664
694
|
file=file,
|
665
|
-
db_name='
|
666
|
-
table_name='
|
695
|
+
db_name='test',
|
696
|
+
table_name='余额查询',
|
697
|
+
target_service='company',
|
698
|
+
database='mysql'
|
667
699
|
)
|
668
700
|
|
669
701
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{mdbq-1.0.8 → mdbq-1.1.0}/mdbq/mysql/data_types_/345/215/263/345/260/206/345/210/240/351/231/244.py"
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|