mdbq 1.0.7__tar.gz → 1.0.9__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 (46) hide show
  1. {mdbq-1.0.7 → mdbq-1.0.9}/PKG-INFO +1 -1
  2. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/aggregation/mysql_types.py +8 -8
  3. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/aggregation/query_data.py +1 -0
  4. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/mysql/mysql.py +56 -27
  5. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq.egg-info/PKG-INFO +1 -1
  6. {mdbq-1.0.7 → mdbq-1.0.9}/setup.py +1 -1
  7. {mdbq-1.0.7 → mdbq-1.0.9}/README.txt +0 -0
  8. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/__init__.py +0 -0
  9. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/__version__.py +0 -0
  10. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/aggregation/__init__.py +0 -0
  11. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/aggregation/aggregation.py +0 -0
  12. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/aggregation/df_types.py +0 -0
  13. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/aggregation/optimize_data.py +0 -0
  14. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/bdup/__init__.py +0 -0
  15. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/bdup/bdup.py +0 -0
  16. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/clean/__init__.py +0 -0
  17. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/clean/data_clean.py +0 -0
  18. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/company/__init__.py +0 -0
  19. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/company/copysh.py +0 -0
  20. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/config/__init__.py +0 -0
  21. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/config/get_myconf.py +0 -0
  22. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/config/products.py +0 -0
  23. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/config/set_support.py +0 -0
  24. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/config/update_conf.py +0 -0
  25. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/dataframe/__init__.py +0 -0
  26. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/dataframe/converter.py +0 -0
  27. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/log/__init__.py +0 -0
  28. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/log/mylogger.py +0 -0
  29. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/mongo/__init__.py +0 -0
  30. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/mongo/mongo.py +0 -0
  31. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/mysql/__init__.py +0 -0
  32. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/mysql/data_types_/345/215/263/345/260/206/345/210/240/351/231/244.py" +0 -0
  33. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/mysql/s_query.py +0 -0
  34. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/mysql/year_month_day.py +0 -0
  35. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/other/__init__.py +0 -0
  36. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/other/porxy.py +0 -0
  37. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/other/pov_city.py +0 -0
  38. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/other/ua_sj.py +0 -0
  39. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/pbix/__init__.py +0 -0
  40. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/pbix/pbix_refresh.py +0 -0
  41. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/pbix/refresh_all.py +0 -0
  42. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq/spider/__init__.py +0 -0
  43. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq.egg-info/SOURCES.txt +0 -0
  44. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq.egg-info/dependency_links.txt +0 -0
  45. {mdbq-1.0.7 → mdbq-1.0.9}/mdbq.egg-info/top_level.txt +0 -0
  46. {mdbq-1.0.7 → mdbq-1.0.9}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 1.0.7
3
+ Version: 1.0.9
4
4
  Home-page: https://pypi.org/project/mdbsql
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -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):
@@ -155,7 +155,7 @@ def mysql_all_dtypes(db_name=None, table_name=None, path=None):
155
155
  if not path:
156
156
  path = set_support.SetSupport(dirname='support').dirname
157
157
 
158
- username, password, host, port = get_myconf.select_config_values(target_service='home_lx', database='mysql')
158
+ username, password, host, port = get_myconf.select_config_values(target_service='company', database='mysql')
159
159
  config = {
160
160
  'host': host,
161
161
  'port': port,
@@ -8,6 +8,7 @@ import datetime
8
8
  from dateutil.relativedelta import relativedelta
9
9
  import pandas as pd
10
10
  import numpy as np
11
+ from functools import wraps
11
12
  import platform
12
13
  import getpass
13
14
  import json
@@ -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 不是 dataframe 结构')
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()
@@ -123,24 +131,21 @@ class MysqlUpload:
123
131
  print(f'{now}正在更新 mysql ({self.host}:{self.port}) {db_name}/{table_name}')
124
132
  datas = df.to_dict(orient='records')
125
133
  for data in datas:
126
- try:
127
- cols = ', '.join(f"`{item}`" for item in data.keys()) # 列名转义
128
- # data.update({item: f"{data[item]}" for item in data.keys()}) # 全部值转字符, 不是必须的
129
- values = ', '.join([f"'{item}'" for item in data.values()]) # 值要加单引号 ''
130
- condition = []
131
- for k, v in data.items():
132
- condition += [f"`{k}` = '{v}'"]
133
- condition = ' AND '.join(condition) # 构建查询条件
134
- # print(condition)
135
-
136
- sql = f"SELECT {cols} FROM `{table_name}` WHERE {condition}"
134
+ cols = ', '.join(f"`{item}`" for item in data.keys()) # 列名转义
135
+ # data.update({item: f"{data[item]}" for item in data.keys()}) # 全部值转字符, 不是必须的
136
+ values = ', '.join([f"'{item}'" for item in data.values()]) # 值要加单引号 ''
137
+ condition = []
138
+ for k, v in data.items():
139
+ condition += [f"`{k}` = '{v}'"]
140
+ condition = ' AND '.join(condition) # 构建查询条件
141
+ # print(condition)
142
+
143
+ sql = f"SELECT {cols} FROM `{table_name}` WHERE {condition}"
144
+ cursor.execute(sql)
145
+ result = cursor.fetchall() # 获取查询结果, 如果有结果返回 list,没有则返回空元组 tuple
146
+ if not result: # 数据不存在则插入
147
+ sql = f"INSERT INTO `{table_name}` ({cols}) VALUES ({values});"
137
148
  cursor.execute(sql)
138
- result = cursor.fetchall() # 获取查询结果, 如果有结果返回 list,没有则返回空元组 tuple
139
- if not result: # 数据不存在则插入
140
- sql = f"INSERT INTO `{table_name}` ({cols}) VALUES ({values});"
141
- cursor.execute(sql)
142
- except:
143
- pass
144
149
  connection.commit() # 提交事务
145
150
 
146
151
  def convert_dtypes(self, df, db_name, table_name):
@@ -155,7 +160,7 @@ class MysqlUpload:
155
160
  # path = set_support.SetSupport(dirname='support').dirname
156
161
  d = mysql_types.DataTypes()
157
162
  # 从本地文件中读取 dtype 信息
158
- dtypes = d.load_dtypes(cl='mysql', db_name=db_name, table_name=table_name)
163
+ dtypes, cl, db_n, tb_n = d.load_dtypes(cl='mysql', db_name=db_name, table_name=table_name)
159
164
  # 可能会因为没有 json 文件, 返回 None
160
165
  if dtypes:
161
166
  # 按照文件记录更新 dtypes
@@ -171,7 +176,7 @@ class MysqlUpload:
171
176
  dtypes.update({col: self.convert_dtype_to_sql(df=df, col=col, dtype=df[col].dtype) for col in col_not_exist})
172
177
  # 至此 df 中全部列类型已经转换完成
173
178
  # 返回结果, 示例: {'上市年份': 'mediumtext', '商品id': 'mediumtext', '平台': 'mediumtext'}
174
- return dtypes
179
+ return dtypes, cl, db_n, tb_n # 返回这些结果的目的是等添加完列再写 json 文件才能读到 types 信息
175
180
 
176
181
  def convert_dtype_to_sql(self, df, col, dtype):
177
182
  """ 按照以下规则转换DataFrame列的数据类型为 MYSQL 专有的数据类型 """
@@ -199,7 +204,29 @@ class MysqlUpload:
199
204
  return 'mediumtext'
200
205
  return 'INT'
201
206
  elif dtype == 'float64':
202
- return 'double' # mysql 中不要使用 float 类型,会影响计算结果
207
+ # step = len(str(max(df[col].tolist()))) # 数字长度包含小数点
208
+ int_step = len(str(max(df[col].tolist())).split('.')[0]) # 整数位数长度
209
+ f_step = len(str(max(df[col].tolist())).split('.')[1]) # 小数位数长度
210
+ if int_step >= 12:
211
+ return 'mediumtext' # mysql 中不要使用 float 和 double 类型,会影响计算结果
212
+ elif int_step >= 8 and f_step >= 0:
213
+ return 'decimal(16, 2)'
214
+ elif int_step >= 6 and f_step >= 0:
215
+ return 'decimal(10, 2)'
216
+ elif int_step >= 4 and f_step >= 0:
217
+ return 'decimal(10, 2)'
218
+ elif int_step >= 2 and f_step >= 6:
219
+ return 'decimal(12, 4)'
220
+ elif int_step >= 2 and f_step >= 4:
221
+ return 'decimal(10, 4)'
222
+ elif int_step >= 2 and f_step >= 0:
223
+ return 'decimal(10, 2)'
224
+ elif int_step >= 1 and f_step >= 6:
225
+ return 'decimal(10, 6)'
226
+ elif int_step >= 1 and f_step >= 4:
227
+ return 'decimal(10, 4)'
228
+ else:
229
+ return 'decimal(10, 2)'
203
230
  elif dtype == 'object':
204
231
  return 'mediumtext'
205
232
  else:
@@ -647,8 +674,8 @@ def download_datas(table_name, save_path, start_date):
647
674
  df.to_csv(path, index=False, encoding='utf-8_sig', header=True)
648
675
 
649
676
 
650
- def one_file_to_mysql(file, db_name, table_name):
651
- username, password, host, port = get_myconf.select_config_values(target_service='home_lx', database='mysql')
677
+ def one_file_to_mysql(file, db_name, table_name, target_service, database):
678
+ username, password, host, port = get_myconf.select_config_values(target_service=target_service, database=database)
652
679
 
653
680
  df = pd.read_csv(file, encoding='utf-8_sig', header=0, na_filter=False)
654
681
  m = MysqlUpload(username=username, password=password, host=host, port=port)
@@ -659,11 +686,13 @@ if __name__ == '__main__':
659
686
  username, password, host, port = get_myconf.select_config_values(target_service='company', database='mysql')
660
687
  print(username, password, host, port)
661
688
 
662
- file = '/Users/xigua/数据中心/原始文件2/属性设置/城市等级.csv'
689
+ file = '/Users/xigua/Downloads/余额查询.csv'
663
690
  one_file_to_mysql(
664
691
  file=file,
665
- db_name='属性设置2',
666
- table_name='城市等级',
692
+ db_name='test',
693
+ table_name='余额查询',
694
+ target_service='company',
695
+ database='mysql'
667
696
  )
668
697
 
669
698
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 1.0.7
3
+ Version: 1.0.9
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.0.7',
6
+ version='1.0.9',
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
File without changes
File without changes