mdbq 1.5.1__tar.gz → 1.5.3__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 (45) hide show
  1. {mdbq-1.5.1 → mdbq-1.5.3}/PKG-INFO +1 -1
  2. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/aggregation/aggregation.py +6 -6
  3. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/aggregation/mysql_types.py +84 -85
  4. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/aggregation/query_data.py +10 -12
  5. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/company/copysh.py +3 -3
  6. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/config/products.py +1 -1
  7. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/mysql/mysql.py +12 -11
  8. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq.egg-info/PKG-INFO +1 -1
  9. {mdbq-1.5.1 → mdbq-1.5.3}/setup.py +1 -1
  10. {mdbq-1.5.1 → mdbq-1.5.3}/README.txt +0 -0
  11. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/__init__.py +0 -0
  12. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/__version__.py +0 -0
  13. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/aggregation/__init__.py +0 -0
  14. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/aggregation/df_types.py +0 -0
  15. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/aggregation/optimize_data.py +0 -0
  16. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/bdup/__init__.py +0 -0
  17. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/bdup/bdup.py +0 -0
  18. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/clean/__init__.py +0 -0
  19. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/clean/data_clean.py +0 -0
  20. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/company/__init__.py +0 -0
  21. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/config/__init__.py +0 -0
  22. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/config/get_myconf.py +0 -0
  23. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/config/set_support.py +0 -0
  24. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/config/update_conf.py +0 -0
  25. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/dataframe/__init__.py +0 -0
  26. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/dataframe/converter.py +0 -0
  27. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/log/__init__.py +0 -0
  28. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/log/mylogger.py +0 -0
  29. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/mongo/__init__.py +0 -0
  30. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/mongo/mongo.py +0 -0
  31. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/mysql/__init__.py +0 -0
  32. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/mysql/s_query.py +0 -0
  33. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/mysql/year_month_day.py +0 -0
  34. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/other/__init__.py +0 -0
  35. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/other/porxy.py +0 -0
  36. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/other/pov_city.py +0 -0
  37. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/other/ua_sj.py +0 -0
  38. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/pbix/__init__.py +0 -0
  39. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/pbix/pbix_refresh.py +0 -0
  40. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/pbix/refresh_all.py +0 -0
  41. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq/spider/__init__.py +0 -0
  42. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq.egg-info/SOURCES.txt +0 -0
  43. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq.egg-info/dependency_links.txt +0 -0
  44. {mdbq-1.5.1 → mdbq-1.5.3}/mdbq.egg-info/top_level.txt +0 -0
  45. {mdbq-1.5.1 → mdbq-1.5.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 1.5.1
3
+ Version: 1.5.3
4
4
  Home-page: https://pypi.org/project/mdbsql
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -604,7 +604,7 @@ class DatabaseUpdate:
604
604
  # }
605
605
  # )
606
606
 
607
- def upload_df(self, service_databases=[{}], path=None, system_name=None):
607
+ def upload_df(self, service_databases=[{}], path=None):
608
608
  """
609
609
  将清洗后的 df 上传数据库, copysh.py 调用
610
610
  """
@@ -662,7 +662,7 @@ class DatabaseUpdate:
662
662
  df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
663
663
  drop_duplicates=True, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
664
664
  filename=rt_filename, # 用来追踪处理进度
665
- system_name=system_name, # 用来追踪处理进度
665
+ service_database=service_database, # 字典
666
666
  )
667
667
  df_to_json.as_json_file() # 写入 json 文件, 包含数据的 dtypes 信息
668
668
 
@@ -829,7 +829,7 @@ class DatabaseUpdate:
829
829
  df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
830
830
  drop_duplicates=True, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
831
831
  filename=None, # 用来追踪处理进度
832
- system_name=service_name, # 用来追踪处理进度
832
+ service_database=service_database, # 用来追踪处理进度
833
833
  )
834
834
  # return df
835
835
 
@@ -859,11 +859,11 @@ class DatabaseUpdate:
859
859
  df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
860
860
  drop_duplicates=True, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
861
861
  filename=None, # 用来追踪处理进度
862
- system_name=service_name, # 用来追踪处理进度
862
+ service_database=service_database, # 用来追踪处理进度
863
863
  )
864
864
 
865
865
 
866
- def upload_dir(path, db_name, collection_name, dbs={'mysql': True, 'mongodb': True}, json_path=None, system_name=None):
866
+ def upload_dir(path, db_name, collection_name, dbs={'mysql': True, 'mongodb': True}, json_path=None):
867
867
  """ 上传一个文件夹到 mysql 或者 mongodb 数据库 """
868
868
  if not os.path.isdir(path):
869
869
  print(f'{os.path.splitext(os.path.basename(__file__))[0]}.upload_dir: 函数只接受文件夹路径,不是一个文件夹: {path}')
@@ -1036,7 +1036,7 @@ def test2():
1036
1036
  # {'home_lx': 'mongodb'},
1037
1037
  {'home_lx': 'mysql'},
1038
1038
  # {'nas': 'mysql'}
1039
- ], path=None, system_name=None)
1039
+ ], path=None, service_name=None)
1040
1040
 
1041
1041
 
1042
1042
  if __name__ == '__main__':
@@ -38,7 +38,7 @@ class DataTypes:
38
38
  数据简介: 记录 dataframe 或者数据库的列信息(dtypes),可以记录其信息或者加载相关信息用于入库使用,
39
39
  第一字段为分类(如 dataframe/mysql),第二字段为数据库名,第三字段为集合名,第四段列名及其数据类型
40
40
  """
41
- def __init__(self, path=None, system_name=None):
41
+ def __init__(self, path=None, service_name=None):
42
42
  self.datas = {
43
43
  '_json统计':
44
44
  {
@@ -52,10 +52,10 @@ class DataTypes:
52
52
  self.path = path
53
53
  if not self.path:
54
54
  self.path = set_support.SetSupport(dirname='support').dirname
55
- self.system_name = system_name
56
- if not self.system_name:
57
- self.system_name = 'home_lx'
58
- self.json_file = os.path.join(self.path, f'mysql_types_{self.system_name}.json')
55
+ self.service_name = service_name
56
+ if not self.service_name:
57
+ self.service_name = 'home_lx'
58
+ self.json_file = os.path.join(self.path, f'mysql_types_{self.service_name}.json')
59
59
  if not os.path.isdir(self.path):
60
60
  os.makedirs(self.path)
61
61
  if not os.path.isfile(self.json_file):
@@ -154,95 +154,94 @@ class DataTypes:
154
154
  return {}, cl, None, None # 返回这些结果的目的是等添加完列再写 json 文件才能读到 types 信息
155
155
 
156
156
 
157
- def mysql_all_dtypes(db_name=None, table_name=None, service_databases=[{'home_lx': 'mysql'}], path=None, system_name=None):
157
+ def mysql_all_dtypes(db_name=None, table_name=None, service_database={'home_lx': 'mysql'}, path=None):
158
158
  """
159
159
  更新笔记本 mysql 中所有数据库的 dtypes 信息到本地 json
160
160
  """
161
- for service_database in service_databases:
162
- for service_name, database in service_database.items():
163
- username, password, host, port = get_myconf.select_config_values(target_service=service_name, database=database)
164
- config = {
165
- 'host': host,
166
- 'port': port,
167
- 'user': username,
168
- 'password': password,
169
- 'charset': 'utf8mb4', # utf8mb4 支持存储四字节的UTF-8字符集
170
- 'cursorclass': pymysql.cursors.DictCursor,
171
- }
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
+ }
172
171
 
172
+ 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]
178
+ 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 字段
173
195
  connection = pymysql.connect(**config) # 连接数据库
174
- with connection.cursor() as cursor:
175
- sql = "SHOW DATABASES;"
176
- cursor.execute(sql)
177
- db_name_lists = cursor.fetchall()
178
- db_name_lists = [item['Database'] for item in db_name_lists]
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:
179
208
  connection.close()
180
-
181
- sys_lists = ['information_schema', 'mysql', 'performance_schema', 'sakila', 'sys']
182
- db_name_lists = [item for item in db_name_lists if item not in sys_lists]
183
-
184
- # db_name_lists = [
185
- # '京东数据2',
186
- # '推广数据2',
187
- # '市场数据2',
188
- # '生意参谋2',
189
- # '生意经2',
190
- # '属性设置2',
191
- # '聚合数据',
192
- # ]
193
- results = [] # 返回结果示例: [{'云电影': '电影更新'}, {'生意经2': 'e3_零售明细统计'}]
194
- for db_ in db_name_lists:
195
- config.update({'database': db_}) # 添加更新 config 字段
196
- connection = pymysql.connect(**config) # 连接数据库
197
- try:
198
- with connection.cursor() as cursor:
199
- sql = f"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{db_}';"
200
- sql = "SHOW TABLES;"
201
- cursor.execute(sql)
202
- res_tables = cursor.fetchall()
203
- for res_table in res_tables:
204
- for k, v in res_table.items():
205
- results.append({db_: v})
206
- except:
207
- pass
208
- finally:
209
- connection.close()
210
- time.sleep(0.5)
211
-
212
- d = DataTypes(path=path, system_name=system_name)
213
- for result in results:
214
- for db_n, table_n in result.items():
215
- # print(db_n, table_n, db_name, table_name)
216
- if db_name and table_name: # 下载一个指定的数据表
217
- if db_name != db_n or table_name != table_n:
218
- continue
219
- elif db_name: # 下载一个数据库的所有数据表
220
- if db_name != db_n:
221
- continue
222
- # 如果 db_name 和 table_name 都不指定,则下载所有数据库的所有数据表
223
- print(f'获取列信息 数据库: < {db_n} >, 数据表: < {table_n} >')
224
- sq = s_query.QueryDatas(username=username, password=password, host=host, port=port)
225
- # 获取数据表的指定列, 返回列表
226
- # [{'视频bv号': 'BV1Dm4y1S7BU', '下载进度': 1}, {'视频bv号': 'BV1ov411c7US', '下载进度': 1}]
227
- name_type = sq.dtypes_to_list(db_name=db_n, table_name=table_n)
228
- if name_type:
229
- dtypes = {item['COLUMN_NAME']: item['COLUMN_TYPE'] for item in name_type}
230
- dtypes = {'mysql': {db_n: {table_n: dtypes}}}
231
- d.get_mysql_types(
232
- dtypes=dtypes,
233
- cl='mysql',
234
- db_name=db_n,
235
- table_name=table_n,
236
- is_file_dtype=True # True表示旧文件有限
237
- )
238
- else:
239
- print(f'数据库回传数据(name_type)为空')
240
- # print(d.datas)
241
- d.as_json_file()
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)为空')
239
+ # print(d.datas)
240
+ d.as_json_file()
242
241
 
243
242
 
244
243
  if __name__ == '__main__':
245
244
  # 更新 mysql 中所有数据库的 dtypes 信息到本地 json
246
245
  mysql_all_dtypes(
247
- path='/Users/xigua/Downloads', system_name='company',
246
+ path='/Users/xigua/Downloads', service_name='company',
248
247
  )
@@ -577,7 +577,7 @@ class GroupBy:
577
577
  df.to_excel(os.path.join(path, filename + '.xlsx'), index=index, header=header, engine=engine, freeze_panes=freeze_panes)
578
578
 
579
579
 
580
- def data_aggregation_one(service_databases=[{}], months=1, system_name=None,):
580
+ def data_aggregation_one(service_databases=[{}], months=1):
581
581
  """
582
582
  # 单独处理某一个聚合数据库,修改添加 data_dict 的值
583
583
  """
@@ -616,12 +616,11 @@ def data_aggregation_one(service_databases=[{}], months=1, system_name=None,):
616
616
  table_name=table_name,
617
617
  drop_duplicates=False,
618
618
  icm_update=unique_key_list,
619
- system_name=system_name,
620
- service_databases=service_databases,
619
+ service_database=service_database,
621
620
  ) # 3. 回传数据库
622
621
 
623
622
 
624
- def data_aggregation(service_databases=[{}], months=1, system_name=None,):
623
+ def data_aggregation(service_databases=[{}], months=1):
625
624
  """
626
625
  1. 从数据库中读取数据
627
626
  2. 数据聚合清洗
@@ -692,8 +691,7 @@ def data_aggregation(service_databases=[{}], months=1, system_name=None,):
692
691
  table_name=table_name,
693
692
  drop_duplicates=False,
694
693
  icm_update=unique_key_list,
695
- system_name=system_name,
696
- service_databases=service_databases,
694
+ service_database=service_database,
697
695
  ) # 3. 回传数据库
698
696
  res = g.performance(bb_tg=True) # 盈亏表,依赖其他表,单独做
699
697
  m.df_to_mysql(
@@ -702,8 +700,7 @@ def data_aggregation(service_databases=[{}], months=1, system_name=None,):
702
700
  table_name='_全店商品销售',
703
701
  drop_duplicates=False,
704
702
  icm_update=['日期', '商品id'], # 设置唯一主键
705
- system_name = system_name,
706
- service_databases=service_databases,
703
+ service_database=service_database,
707
704
  )
708
705
  res = g.performance(bb_tg=False) # 盈亏表,依赖其他表,单独做
709
706
  m.df_to_mysql(
@@ -712,8 +709,7 @@ def data_aggregation(service_databases=[{}], months=1, system_name=None,):
712
709
  table_name='_推广商品销售',
713
710
  drop_duplicates=False,
714
711
  icm_update=['日期', '商品id'], # 设置唯一主键
715
- system_name=system_name,
716
- service_databases=service_databases,
712
+ service_database=service_database,
717
713
  )
718
714
 
719
715
  # 这里要注释掉,不然 copysh.py 可能有问题,这里主要修改配置文件,后续触发 home_lx 的 optimize_datas.py(有s)程序进行全局清理
@@ -721,6 +717,8 @@ def data_aggregation(service_databases=[{}], months=1, system_name=None,):
721
717
 
722
718
 
723
719
  if __name__ == '__main__':
724
- # data_aggregation(service_databases=[{'home_lx': 'mysql'}], months=1, system_name='home_lx')
725
- data_aggregation_one(service_databases=[{'company': 'mysql'}], months=1, system_name='company')
720
+ # data_aggregation(service_databases=[{'home_lx': 'mysql'}], months=1)
721
+ data_aggregation_one(service_databases=[{'company': 'mysql'}], months=1)
726
722
  # optimize_data.op_data(service_databases=[{'company': 'mysql'}], days=3650) # 立即启动对聚合数据的清理工作
723
+
724
+
@@ -327,7 +327,7 @@ def op_data(days: int =100):
327
327
  )
328
328
 
329
329
  # 数据聚合
330
- query_data.data_aggregation(service_databases=[{'home_lx': 'mysql'}], months=3, system_name='home_lx')
330
+ query_data.data_aggregation(service_databases=[{'home_lx': 'mysql'}], months=3,)
331
331
  time.sleep(60)
332
332
 
333
333
  # 清理聚合数据
@@ -347,7 +347,7 @@ def main():
347
347
  dp = aggregation.DatabaseUpdate(path=d_path)
348
348
  dp.new_unzip(is_move=True)
349
349
  dp.cleaning(is_move=True) # 公司台式机需要移除自身下载的文件
350
- dp.upload_df(service_databases=[{'company': 'mysql'}], system_name='company')
350
+ dp.upload_df(service_databases=[{'company': 'mysql'}])
351
351
  dp.date_table(service_databases=[{'company': 'mysql'}]) # 因为日期表不受 days 参数控制,因此单独更新日期表
352
352
  dp.other_table(service_databases=[{'company': 'mysql'}]) # 上传 support 文件夹下的 主推商品.csv
353
353
 
@@ -365,4 +365,4 @@ def main():
365
365
  if __name__ == '__main__':
366
366
  main()
367
367
  # # 聚合数据,并清理聚合数据
368
- # query_data.data_aggregation(service_databases=[{'company': 'mysql'}], months=1, system_name='company')
368
+ # query_data.data_aggregation(service_databases=[{'company': 'mysql'}], months=1)
@@ -125,7 +125,7 @@ class Products:
125
125
  table_name='货品年份基准',
126
126
  df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
127
127
  drop_duplicates=True, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
128
- system_name=service_name, # 用来追踪处理进度
128
+ service_database=service_database, # 用来追踪处理进度
129
129
  )
130
130
 
131
131
  def market_date(self, product_id: int):
@@ -57,7 +57,7 @@ class MysqlUpload:
57
57
  }
58
58
  self.filename = None
59
59
 
60
- def df_to_mysql(self, df, table_name, db_name='远程数据源', icm_update=[], service_databases=[{'home_lx': 'mysql'}], df_sql=False, drop_duplicates=False, filename=None, count=None, json_path=None, system_name=None):
60
+ def df_to_mysql(self, df, table_name, db_name='远程数据源', icm_update=[], service_database={'home_lx': 'mysql'}, df_sql=False, drop_duplicates=False, filename=None, count=None, json_path=None):
61
61
  """
62
62
  将 df 写入数据库
63
63
  db_name: 数据库名称
@@ -67,7 +67,6 @@ class MysqlUpload:
67
67
  icm_update: 增量更新, 在聚合数据中使用,原始文件不要使用,设置此参数时需将 drop_duplicates 改为 False
68
68
  使用增量更新: 必须确保 icm_update 传进来的列必须是数据表中唯一主键,值不会发生变化,不会重复,否则可能产生错乱覆盖情况
69
69
  filename: 用来追踪处理进度,传这个参数是方便定位产生错误的文件
70
- system_name: 同样是用来追踪处理进度
71
70
  service_databases: 这个参数是用来设置更新哪台服务器的 types 信息到本地 json 文件
72
71
  json_path: 这个参数同样也是是用来设置更新 json 文件
73
72
  """
@@ -111,8 +110,9 @@ class MysqlUpload:
111
110
  cursor.execute(sql)
112
111
  print(f'创建 mysql 表: {table_name}')
113
112
 
114
- # 2. 列数据类型转换,将 df 数据类型转换为 mysql 的数据类型
115
- dtypes, cl, db_n, tb_n = self.convert_dtypes(df=df, db_name=db_name, table_name=table_name, path=json_path, system_name=system_name)
113
+ for service_name, database in service_database.items():
114
+ # 2. 列数据类型转换,将 df 数据类型转换为 mysql 的数据类型
115
+ dtypes, cl, db_n, tb_n = self.convert_dtypes(df=df, db_name=db_name, table_name=table_name, path=json_path, service_name=service_name)
116
116
 
117
117
  # 有特殊字符不需转义
118
118
  sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s;"
@@ -156,11 +156,11 @@ class MysqlUpload:
156
156
  # 返回这些结果的目的是等添加完列再写 json 文件才能读到 types 信息
157
157
  # ⚠️ mysql_all_dtypes 函数默认只读取 home_lx 的数据库信息,不会读取其他系统
158
158
  if cl and db_n and tb_n:
159
- mysql_types.mysql_all_dtypes(service_databases=service_databases, db_name=db_name, table_name=table_name, system_name=system_name) # 更新一个表的 dtypes
159
+ mysql_types.mysql_all_dtypes(service_database=service_database, db_name=db_name, table_name=table_name) # 更新一个表的 dtypes
160
160
  elif cl and db_n:
161
- mysql_types.mysql_all_dtypes(service_databases=service_databases, db_name=db_name, system_name=system_name) # 更新一个数据库的 dtypes
161
+ mysql_types.mysql_all_dtypes(service_database=service_database, db_name=db_name) # 更新一个数据库的 dtypes
162
162
  elif cl:
163
- mysql_types.mysql_all_dtypes(service_databases=service_databases, system_name=system_name) # 更新所有数据库所有数据表的 dtypes 信息到本地 json
163
+ mysql_types.mysql_all_dtypes(service_database=service_database) # 更新所有数据库所有数据表的 dtypes 信息到本地 json
164
164
 
165
165
  # # 4. 移除指定日期范围内的数据,仅限于聚合数据使用,其他情况不要设置
166
166
  # if drop_duplicates and '日期' in df.columns.tolist():
@@ -173,7 +173,8 @@ class MysqlUpload:
173
173
 
174
174
  # 5. 更新插入数据
175
175
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S ")
176
- print(f'{now}正在更新 mysql ({self.host}:{self.port}) {db_name}/{table_name}, {count}, {self.filename}')
176
+ for service_name, database in service_database.items():
177
+ print(f'{now}正在更新 mysql ({self.host}:{self.port}) {db_name}/{table_name}, {count}, {service_name}, {self.filename}')
177
178
 
178
179
  datas = df.to_dict(orient='records')
179
180
  for data in datas:
@@ -261,7 +262,7 @@ class MysqlUpload:
261
262
  connection.commit() # 提交事务
262
263
  connection.close()
263
264
 
264
- def convert_dtypes(self, df, db_name, table_name, path=None, system_name=None):
265
+ def convert_dtypes(self, df, db_name, table_name, path=None, service_name=None):
265
266
  """
266
267
  根据本地 json 转换 df 的类型为 mysql 专有的数据类型
267
268
  可能不存在本地 json 文件 (函数按指定规则转换并更新 json)
@@ -269,7 +270,7 @@ class MysqlUpload:
269
270
  """
270
271
  cols = df.columns.tolist()
271
272
  # path = set_support.SetSupport(dirname='support').dirname
272
- d = mysql_types.DataTypes(path=path, system_name=system_name)
273
+ d = mysql_types.DataTypes(path=path, service_name=service_name)
273
274
  # 从本地文件中读取 dtype 信息
274
275
  dtypes, cl, db_n, tb_n = d.load_dtypes(cl='mysql', db_name=db_name, table_name=table_name)
275
276
  # 可能会因为没有 json 文件, 返回 None
@@ -813,7 +814,7 @@ if __name__ == '__main__':
813
814
  db_name='test',
814
815
  table_name='测试数据',
815
816
  drop_duplicates=True,
816
- # system_name=system_name,
817
+ # service_name=service_name,
817
818
  # service_databases=service_databases,
818
819
  )
819
820
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 1.5.1
3
+ Version: 1.5.3
4
4
  Home-page: https://pypi.org/project/mdbsql
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -3,7 +3,7 @@
3
3
  from setuptools import setup, find_packages
4
4
 
5
5
  setup(name='mdbq',
6
- version='1.5.1',
6
+ version='1.5.3',
7
7
  author='xigua, ',
8
8
  author_email="2587125111@qq.com",
9
9
  url='https://pypi.org/project/mdbsql',
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes