mdbq 3.0.1__tar.gz → 3.0.2__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 (54) hide show
  1. {mdbq-3.0.1 → mdbq-3.0.2}/PKG-INFO +1 -1
  2. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/aggregation/aggregation.py +17 -27
  3. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/aggregation/query_data.py +83 -9
  4. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/config/products.py +3 -3
  5. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/dataframe/converter.py +3 -3
  6. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/mysql/mysql.py +40 -10
  7. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq.egg-info/PKG-INFO +1 -1
  8. {mdbq-3.0.1 → mdbq-3.0.2}/setup.py +1 -1
  9. {mdbq-3.0.1 → mdbq-3.0.2}/README.txt +0 -0
  10. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/__init__.py +0 -0
  11. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/__version__.py +0 -0
  12. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/aggregation/__init__.py +0 -0
  13. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/aggregation/df_types.py +0 -0
  14. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/aggregation/mysql_types.py +0 -0
  15. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/aggregation/optimize_data.py +0 -0
  16. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/aggregation/query_data_bak.py +0 -0
  17. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/bdup/__init__.py +0 -0
  18. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/bdup/bdup.py +0 -0
  19. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/clean/__init__.py +0 -0
  20. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/clean/clean_upload.py +0 -0
  21. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/clean/data_clean.py +0 -0
  22. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/company/__init__.py +0 -0
  23. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/company/copysh.py +0 -0
  24. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/config/__init__.py +0 -0
  25. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/config/get_myconf.py +0 -0
  26. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/config/myconfig.py +0 -0
  27. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/config/set_support.py +0 -0
  28. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/config/update_conf.py +0 -0
  29. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/dataframe/__init__.py +0 -0
  30. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/log/__init__.py +0 -0
  31. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/log/mylogger.py +0 -0
  32. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/mongo/__init__.py +0 -0
  33. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/mongo/mongo.py +0 -0
  34. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/mysql/__init__.py +0 -0
  35. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/mysql/recheck_mysql.py +0 -0
  36. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/mysql/s_query.py +0 -0
  37. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/mysql/year_month_day.py +0 -0
  38. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/other/__init__.py +0 -0
  39. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/other/porxy.py +0 -0
  40. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/other/pov_city.py +0 -0
  41. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/other/sku_picture.py +0 -0
  42. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/other/ua_sj.py +0 -0
  43. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/pbix/__init__.py +0 -0
  44. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/pbix/pbix_refresh.py +0 -0
  45. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/pbix/refresh_all.py +0 -0
  46. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/pbix/refresh_all_old.py +0 -0
  47. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/req_post/__init__.py +0 -0
  48. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/req_post/req_tb.py +0 -0
  49. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/spider/__init__.py +0 -0
  50. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq/spider/aikucun.py +0 -0
  51. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq.egg-info/SOURCES.txt +0 -0
  52. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq.egg-info/dependency_links.txt +0 -0
  53. {mdbq-3.0.1 → mdbq-3.0.2}/mdbq.egg-info/top_level.txt +0 -0
  54. {mdbq-3.0.1 → mdbq-3.0.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 3.0.1
3
+ Version: 3.0.2
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1238,23 +1238,13 @@ def test():
1238
1238
  # df.to_csv(os.path.join(root, name), encoding='utf-8_sig', index=False, header=True)
1239
1239
  # os.remove(os.path.join(root, name))
1240
1240
  # results.append(df)
1241
- # df = pd.concat(results)
1242
- # df.drop_duplicates(
1243
- # subset=[
1244
- # '日期',
1245
- # '店铺名称',
1246
- # '报表类型',
1247
- # '消耗',
1248
- # '展现量',
1249
- # '点击量',
1250
- # ], keep='last', inplace=True, ignore_index=True)
1251
- # df.fillna(0, inplace=True)
1252
- # for col in df.columns.tolist():
1253
- # df[col] = df[col].apply(lambda x: 0 if str(x) == '' else x)
1254
- # path = '/Users/xigua/Downloads'
1255
- # filename = '品销宝_2024年_合并.csv'
1256
- # df.to_csv(os.path.join(path, filename), encoding='utf-8_sig', index=False, header=True)
1257
1241
 
1242
+ def test2():
1243
+ file = '/Users/xigua/Downloads/商品素材中心.xlsx'
1244
+ df = pd.read_excel(file, engine='openpyxl')
1245
+ df.replace(to_replace=['0'], value='', regex=False, inplace=True)
1246
+ # print(df.head())
1247
+ df.to_excel(file, index=False, header=True, engine='openpyxl')
1258
1248
 
1259
1249
  if __name__ == '__main__':
1260
1250
  # username = 'root'
@@ -1269,17 +1259,17 @@ if __name__ == '__main__':
1269
1259
  # table_name='dmp人群报表',
1270
1260
  # )
1271
1261
 
1272
- # test()
1273
- col = 1
1274
- if col:
1275
- # 上传一个目录到指定数据库
1276
- db_name = '京东数据3'
1277
- table_name = '推广数据_全站营销'
1278
- upload_dir(
1279
- path=r'/Users/xigua/数据中心/原始文件3/京东报表/京准通_全站营销',
1280
- db_name=db_name,
1281
- collection_name=table_name,
1282
- )
1262
+ test2()
1263
+ # col = 0
1264
+ # if col:
1265
+ # # 上传一个目录到指定数据库
1266
+ # db_name = '京东数据3'
1267
+ # table_name = '推广数据_全站营销'
1268
+ # upload_dir(
1269
+ # path=r'/Users/xigua/数据中心/原始文件3/京东报表/京准通_全站营销',
1270
+ # db_name=db_name,
1271
+ # collection_name=table_name,
1272
+ # )
1283
1273
 
1284
1274
 
1285
1275
 
@@ -180,6 +180,56 @@ class MysqlDatasQuery:
180
180
  filename=None, # 用来追踪处理进度
181
181
  reset_id=False, # 是否重置自增列
182
182
  set_typ=set_typ,
183
+ default=True, # 对于空值使用默认值
184
+ )
185
+
186
+ # df_pic:商品排序索引表, 给 powerbi 中的主推款排序用的,(从上月1号到今天的总花费进行排序)
187
+ today = datetime.date.today()
188
+ last_month = today - datetime.timedelta(days=30)
189
+ if last_month.month == 12:
190
+ year_my = today.year - 1
191
+ else:
192
+ year_my = today.year
193
+ # 截取 从上月1日 至 今天的花费数据, 推广款式按此数据从高到低排序(商品图+排序)
194
+ # df_pic_lin = df[df['店铺名称'] == '万里马官方旗舰店']
195
+ df_pic = df.groupby(['日期', '店铺名称', '商品id'], as_index=False).agg({'花费': 'sum'})
196
+ if len(df_pic) == 0:
197
+ return True
198
+ df_pic = df_pic[~df_pic['商品id'].isin([''])] # 指定列中删除包含空值的行
199
+ date_obj = datetime.datetime.strptime(f'{year_my}-{last_month.month}-01', '%Y-%m-%d').date()
200
+ df_pic = df_pic[(df_pic['日期'] >= date_obj)]
201
+ df_pic = df_pic.groupby(['店铺名称', '商品id'], as_index=False).agg({'花费': 'sum'})
202
+ df_pic.sort_values('花费', ascending=False, ignore_index=True, inplace=True)
203
+ df_pic.reset_index(inplace=True)
204
+ df_pic['index'] = df_pic['index'] + 100
205
+ df_pic.rename(columns={'index': '商品索引'}, inplace=True)
206
+ df_pic['商品索引'].fillna(1000, inplace=True)
207
+ df_pic.pop('花费')
208
+ p= df_pic.pop('商品索引')
209
+ df_pic.insert(loc=2, column='商品索引', value=p) # df中插入新列
210
+ df_pic['更新时间'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
211
+ set_typ = {
212
+ '商品id': 'bigint',
213
+ '店铺名称': 'varchar(100)',
214
+ '商品索引': 'smallint',
215
+ '花费': 'decimal(12,2)',
216
+ '更新时间': 'timestamp',
217
+ }
218
+ now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
219
+ print(f'{now} 正在更新: mysql ({host}:{port}) 属性设置3/商品索引表_主推排序调用')
220
+ m_engine.df_to_mysql(
221
+ df=df_pic,
222
+ db_name='属性设置3',
223
+ table_name='商品索引表_主推排序调用',
224
+ icm_update=['商品id'], # 增量更新, 在聚合数据中使用,其他不要用
225
+ move_insert=False, # 先删除,再插入
226
+ df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
227
+ drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
228
+ count=None,
229
+ filename=None, # 用来追踪处理进度
230
+ reset_id=False, # 是否重置自增列
231
+ set_typ=set_typ,
232
+ default=True, # 对于空值使用默认值
183
233
  )
184
234
  return True
185
235
 
@@ -267,6 +317,7 @@ class MysqlDatasQuery:
267
317
  filename=None, # 用来追踪处理进度
268
318
  reset_id=False, # 是否重置自增列
269
319
  set_typ=set_typ,
320
+ default=True, # 对于空值使用默认值
270
321
  )
271
322
  return True
272
323
 
@@ -302,7 +353,7 @@ class MysqlDatasQuery:
302
353
  '总成交笔数': '成交笔数',
303
354
  '总成交金额': '成交金额'
304
355
  }, inplace=True)
305
- df.fillna(0, inplace=True)
356
+ # df.fillna(0, inplace=True)
306
357
  df = df.astype({
307
358
  '商品id': str,
308
359
  '花费': float,
@@ -450,6 +501,7 @@ class MysqlDatasQuery:
450
501
  filename=None, # 用来追踪处理进度
451
502
  reset_id=False, # 是否重置自增列
452
503
  set_typ=set_typ,
504
+ default=True, # 对于空值使用默认值
453
505
  )
454
506
  return True
455
507
 
@@ -486,7 +538,7 @@ class MysqlDatasQuery:
486
538
  '总成交笔数': '成交笔数',
487
539
  '总成交金额': '成交金额'
488
540
  }, inplace=True)
489
- df.fillna(0, inplace=True)
541
+ # df.fillna(0, inplace=True)
490
542
  df = df.astype({
491
543
  '商品id': str,
492
544
  '花费': float,
@@ -579,6 +631,7 @@ class MysqlDatasQuery:
579
631
  filename=None, # 用来追踪处理进度
580
632
  reset_id=False, # 是否重置自增列
581
633
  set_typ=set_typ,
634
+ default=True, # 对于空值使用默认值
582
635
  )
583
636
  return True
584
637
 
@@ -617,7 +670,7 @@ class MysqlDatasQuery:
617
670
  '场景名字': '营销场景',
618
671
  }, inplace=True)
619
672
  df['营销场景'] = '超级直播'
620
- df.fillna(0, inplace=True)
673
+ # df.fillna(0, inplace=True)
621
674
  df = df.astype({
622
675
  '花费': float,
623
676
  # '点击量': int,
@@ -697,6 +750,7 @@ class MysqlDatasQuery:
697
750
  filename=None, # 用来追踪处理进度
698
751
  reset_id=False, # 是否重置自增列
699
752
  set_typ=set_typ,
753
+ default=True, # 对于空值使用默认值
700
754
  )
701
755
  return True
702
756
 
@@ -726,7 +780,7 @@ class MysqlDatasQuery:
726
780
  projection=projection,
727
781
  )
728
782
  df = df[df['报表类型'] == '账户']
729
- df.fillna(value=0, inplace=True)
783
+ # df.fillna(value=0, inplace=True)
730
784
  df.rename(columns={
731
785
  '消耗': '花费',
732
786
  '宝贝加购数': '加购量',
@@ -804,6 +858,7 @@ class MysqlDatasQuery:
804
858
  filename=None, # 用来追踪处理进度
805
859
  reset_id=False, # 是否重置自增列
806
860
  set_typ=set_typ,
861
+ default=True, # 对于空值使用默认值
807
862
  )
808
863
  return True
809
864
 
@@ -858,6 +913,7 @@ class MysqlDatasQuery:
858
913
  filename=None, # 用来追踪处理进度
859
914
  reset_id=False, # 是否重置自增列
860
915
  set_typ=set_typ,
916
+ default=True, # 对于空值使用默认值
861
917
  )
862
918
  return True
863
919
 
@@ -915,6 +971,7 @@ class MysqlDatasQuery:
915
971
  filename=None, # 用来追踪处理进度
916
972
  reset_id=False, # 是否重置自增列
917
973
  set_typ=set_typ,
974
+ default=True, # 对于空值使用默认值
918
975
  )
919
976
  return True
920
977
 
@@ -996,6 +1053,7 @@ class MysqlDatasQuery:
996
1053
  filename=None, # 用来追踪处理进度
997
1054
  reset_id=False, # 是否重置自增列
998
1055
  set_typ=set_typ,
1056
+ default=True, # 对于空值使用默认值
999
1057
  )
1000
1058
  return True
1001
1059
 
@@ -1043,6 +1101,7 @@ class MysqlDatasQuery:
1043
1101
  filename=None, # 用来追踪处理进度
1044
1102
  reset_id=False, # 是否重置自增列
1045
1103
  set_typ=set_typ,
1104
+ default=True, # 对于空值使用默认值
1046
1105
  )
1047
1106
  return True
1048
1107
 
@@ -1126,6 +1185,7 @@ class MysqlDatasQuery:
1126
1185
  filename=None, # 用来追踪处理进度
1127
1186
  reset_id=False, # 是否重置自增列
1128
1187
  set_typ=set_typ,
1188
+ default=True, # 对于空值使用默认值
1129
1189
  )
1130
1190
  return True
1131
1191
 
@@ -1192,6 +1252,7 @@ class MysqlDatasQuery:
1192
1252
  filename=None, # 用来追踪处理进度
1193
1253
  reset_id=False, # 是否重置自增列
1194
1254
  set_typ=set_typ,
1255
+ default=True, # 对于空值使用默认值
1195
1256
  )
1196
1257
  return True
1197
1258
 
@@ -1289,6 +1350,7 @@ class MysqlDatasQuery:
1289
1350
  filename=None, # 用来追踪处理进度
1290
1351
  reset_id=False, # 是否重置自增列
1291
1352
  set_typ=set_typ,
1353
+ default=True, # 对于空值使用默认值
1292
1354
  )
1293
1355
  return True
1294
1356
 
@@ -1358,6 +1420,7 @@ class MysqlDatasQuery:
1358
1420
  filename=None, # 用来追踪处理进度
1359
1421
  reset_id=False, # 是否重置自增列
1360
1422
  set_typ=set_typ,
1423
+ default=True, # 对于空值使用默认值
1361
1424
  )
1362
1425
  return True
1363
1426
 
@@ -1419,6 +1482,7 @@ class MysqlDatasQuery:
1419
1482
  filename=None, # 用来追踪处理进度
1420
1483
  reset_id=False, # 是否重置自增列
1421
1484
  set_typ=set_typ,
1485
+ default=True, # 对于空值使用默认值
1422
1486
  )
1423
1487
  return True
1424
1488
 
@@ -1498,6 +1562,7 @@ class MysqlDatasQuery:
1498
1562
  filename=None, # 用来追踪处理进度
1499
1563
  reset_id=False, # 是否重置自增列
1500
1564
  set_typ=set_typ,
1565
+ default=True, # 对于空值使用默认值
1501
1566
  )
1502
1567
  return True
1503
1568
 
@@ -1636,6 +1701,7 @@ class MysqlDatasQuery:
1636
1701
  filename=None, # 用来追踪处理进度
1637
1702
  reset_id=False, # 是否重置自增列
1638
1703
  set_typ=set_typ,
1704
+ default=True, # 对于空值使用默认值
1639
1705
  )
1640
1706
  return True
1641
1707
 
@@ -1888,6 +1954,7 @@ class MysqlDatasQuery:
1888
1954
  filename=None, # 用来追踪处理进度
1889
1955
  reset_id=False, # 是否重置自增列
1890
1956
  set_typ=set_typ,
1957
+ default=True, # 对于空值使用默认值
1891
1958
  )
1892
1959
  return True
1893
1960
 
@@ -1972,6 +2039,7 @@ class MysqlDatasQuery:
1972
2039
  filename=None, # 用来追踪处理进度
1973
2040
  reset_id=False, # 是否重置自增列
1974
2041
  set_typ=set_typ,
2042
+ default=True, # 对于空值使用默认值
1975
2043
  )
1976
2044
  return True
1977
2045
 
@@ -2024,6 +2092,7 @@ class MysqlDatasQuery:
2024
2092
  filename=None, # 用来追踪处理进度
2025
2093
  reset_id=False, # 是否重置自增列
2026
2094
  set_typ=set_typ,
2095
+ default=True, # 对于空值使用默认值
2027
2096
  )
2028
2097
  return True
2029
2098
 
@@ -2131,6 +2200,7 @@ class MysqlDatasQuery:
2131
2200
  filename=None, # 用来追踪处理进度
2132
2201
  reset_id=False, # 是否重置自增列
2133
2202
  set_typ=set_typ,
2203
+ default=True, # 对于空值使用默认值
2134
2204
  )
2135
2205
  return True
2136
2206
 
@@ -2541,6 +2611,7 @@ class MysqlDatasQuery:
2541
2611
  filename=None, # 用来追踪处理进度
2542
2612
  reset_id=False, # 是否重置自增列
2543
2613
  set_typ=set_typ,
2614
+ default=True, # 对于空值使用默认值
2544
2615
  )
2545
2616
  return True
2546
2617
 
@@ -2616,7 +2687,7 @@ class MysqlDatasQuery:
2616
2687
  '自然流量曝光量': int,
2617
2688
  }
2618
2689
  )
2619
- [df[col].apply(lambda x: '0' if str(x) == '' else x) for col in df.columns.tolist()]
2690
+ # [df[col].apply(lambda x: '0' if str(x) == '' else x) for col in df.columns.tolist()]
2620
2691
  set_typ = {
2621
2692
  '日期': 'date',
2622
2693
  '店铺名称': 'varchar(100)',
@@ -2651,6 +2722,7 @@ class MysqlDatasQuery:
2651
2722
  filename=None, # 用来追踪处理进度
2652
2723
  reset_id=False, # 是否重置自增列
2653
2724
  set_typ=set_typ,
2725
+ default=True, # 对于空值使用默认值
2654
2726
  )
2655
2727
  return True
2656
2728
 
@@ -2690,7 +2762,7 @@ class MysqlDatasQuery:
2690
2762
  df['毛利率'] = df.apply(
2691
2763
  lambda x: round((x['成交金额'] - x['商品成本']) / x['成交金额'], 4) if x['成交金额'] > 0 else 0, axis=1)
2692
2764
  df['盈亏'] = df.apply(lambda x: x['商品毛利'] - x['花费'], axis=1)
2693
- [df[col].apply(lambda x: '0' if str(x) == '' else x) for col in df.columns.tolist()]
2765
+ # [df[col].apply(lambda x: '0' if str(x) == '' else x) for col in df.columns.tolist()]
2694
2766
  set_typ = {
2695
2767
  '日期': 'date',
2696
2768
  '跟单sku_id': 'bigint',
@@ -2722,6 +2794,7 @@ class MysqlDatasQuery:
2722
2794
  filename=None, # 用来追踪处理进度
2723
2795
  reset_id=False, # 是否重置自增列
2724
2796
  set_typ=set_typ,
2797
+ default=True, # 对于空值使用默认值
2725
2798
  )
2726
2799
  return True
2727
2800
 
@@ -2780,6 +2853,7 @@ def date_table():
2780
2853
  count=None,
2781
2854
  filename=None, # 用来追踪处理进度
2782
2855
  set_typ=set_typ,
2856
+ default=True, # 对于空值使用默认值
2783
2857
  )
2784
2858
 
2785
2859
 
@@ -2851,13 +2925,13 @@ def query_(months=1, less_dict=[]):
2851
2925
 
2852
2926
 
2853
2927
  if __name__ == '__main__':
2854
- main(days=100, months=3)
2855
- # query_(months=13)
2928
+ main(days=130, months=3)
2929
+ # query_(months=1)
2856
2930
 
2857
2931
  # # 4. 清理聚合数据
2858
2932
  # optimize_data.op_data(
2859
2933
  # db_name_lists=['聚合数据'],
2860
- # days=40,
2934
+ # days=300,
2861
2935
  # is_mongo=False,
2862
2936
  # is_mysql=True,
2863
2937
  # )
@@ -142,9 +142,9 @@ class Products:
142
142
  # icm_update=['日期', '店铺名称', '宝贝id'], # 唯一组合键
143
143
  unique_main_key=['商品id'],
144
144
  set_typ={
145
- '商品id': 'mediumtext',
146
- '平台': 'mediumtext',
147
- '上市年份': 'mediumtext',
145
+ '商品id': 'bigint',
146
+ '平台': 'varchar(100)',
147
+ '上市年份': 'varchar(100)',
148
148
  },
149
149
  )
150
150
 
@@ -31,8 +31,8 @@ class DataFrameConverter(object):
31
31
  return longest_value
32
32
 
33
33
  # dtypes = df.dtypes.apply(str).to_dict() # 将 dataframe 数据类型转为字典形式
34
- df.replace([np.inf, -np.inf], 0, inplace=True) # 清理一些非法值
35
- df.replace(to_replace=['\\N', '-', '--', '', 'nan', 'NAN'], value=0, regex=False, inplace=True) # 替换掉特殊字符
34
+ df.replace([np.inf, -np.inf], '', inplace=True) # 清理一些非法值
35
+ df.replace(to_replace=['\\N', '-', '--', '', 'nan', 'NAN'], value='', regex=False, inplace=True) # 替换掉特殊字符
36
36
  df.replace(to_replace=[','], value='', regex=True, inplace=True)
37
37
  df.replace(to_replace=['="'], value='', regex=True, inplace=True) # ="和"不可以放在一起清洗, 因为有: id=86785565
38
38
  df.replace(to_replace=['"'], value='', regex=True, inplace=True)
@@ -88,7 +88,7 @@ class DataFrameConverter(object):
88
88
  new_col = re.sub(r'_{2,}', '_', new_col)
89
89
  new_col = re.sub(r'_+$', '', new_col)
90
90
  df.rename(columns={col: new_col}, inplace=True)
91
- df.fillna(0, inplace=True)
91
+ # df.fillna(0, inplace=True)
92
92
  return df
93
93
 
94
94
 
@@ -127,7 +127,7 @@ class MysqlUpload:
127
127
  return wrapper
128
128
 
129
129
  @try_except
130
- def dict_to_mysql(self, db_name, table_name, dict_data, icm_update=None, main_key=None, unique_main_key=None, index_length=100, set_typ=None):
130
+ def dict_to_mysql(self, db_name, table_name, dict_data, icm_update=None, main_key=None, unique_main_key=None, index_length=100, set_typ=None, default=True):
131
131
  """
132
132
  插入字典数据
133
133
  dict_data: 字典
@@ -186,7 +186,22 @@ class MysqlUpload:
186
186
  if col_not_exist: # 数据表中不存在的列
187
187
  for col in col_not_exist:
188
188
  # 创建列,需转义
189
- sql = f"ALTER TABLE `{table_name}` ADD COLUMN `{col}` {dtypes[col]} NOT NULL;"
189
+ if default:
190
+ if dtypes[col] == 'date':
191
+ default = '2000-01-01'
192
+ elif dtypes[col] == 'datetime' or dtypes[col] == 'timestamp':
193
+ default = '2000-01-01 10:00:00'
194
+ elif 'decimal' in dtypes[col]:
195
+ default = 0.0
196
+ elif 'int' in dtypes[col]:
197
+ default = 0
198
+ elif 'varchar' in dtypes[col] or 'text' in dtypes[col]:
199
+ default = ''
200
+ elif 'year' in dtypes[col]:
201
+ default = '2000'
202
+ sql = f"ALTER TABLE `{table_name}` ADD COLUMN `{col}` {dtypes[col]} NOT NULL DEFAULT '{default}';"
203
+ else:
204
+ sql = f"ALTER TABLE `{table_name}` ADD COLUMN `{col}` {dtypes[col]} NOT NULL;"
190
205
  cursor.execute(sql)
191
206
  print(f"添加列: {col}({dtypes[col]})") # 添加列并指定数据类型
192
207
 
@@ -362,8 +377,8 @@ class MysqlUpload:
362
377
 
363
378
  def cover_df(self, df):
364
379
  """ 清理 df 的值和列名 """
365
- df.replace([np.inf, -np.inf], 0, inplace=True) # 清理一些非法值
366
- df.replace(to_replace=['\\N', '-', '--', '', 'nan', 'NAN'], value=0, regex=False, inplace=True) # 替换掉特殊字符
380
+ df.replace([np.inf, -np.inf], '', inplace=True) # 清理一些非法值
381
+ df.replace(to_replace=['\\N', '-', '--', '', 'nan', 'NAN'], value='', regex=False, inplace=True) # 替换掉特殊字符
367
382
  df.replace(to_replace=[','], value='', regex=True, inplace=True)
368
383
  df.replace(to_replace=['="'], value='', regex=True, inplace=True) # ="和"不可以放在一起清洗, 因为有: id=86785565
369
384
  df.replace(to_replace=['"'], value='', regex=True, inplace=True)
@@ -387,7 +402,7 @@ class MysqlUpload:
387
402
  new_col = re.sub(r'_{2,}', '_', new_col)
388
403
  new_col = re.sub(r'_+$', '', new_col)
389
404
  df.rename(columns={col: new_col}, inplace=True)
390
- df.fillna(0, inplace=True)
405
+ # df.fillna(0, inplace=True)
391
406
  return df
392
407
 
393
408
  def convert_df_dtypes(self, df: pd.DataFrame):
@@ -411,15 +426,15 @@ class MysqlUpload:
411
426
  elif result4: # 小数
412
427
  __res_dict.update({k: 'decimal(12,2)'})
413
428
  elif k == '日期':
414
- __res_dict.update({k: 'DATE'})
429
+ __res_dict.update({k: 'date'})
415
430
  elif k == '更新时间':
416
- __res_dict.update({k: 'TIMESTAMP'})
431
+ __res_dict.update({k: 'timestamp'})
417
432
  elif v == 'int64':
418
433
  __res_dict.update({k: 'int'})
419
434
  elif v == 'float64':
420
435
  __res_dict.update({k: 'decimal(10,4)'})
421
436
  elif v == 'bool':
422
- __res_dict.update({k: 'BOOLEAN'})
437
+ __res_dict.update({k: 'boolean'})
423
438
  elif v == 'datetime64[ns]':
424
439
  __res_dict.update({k: 'datetime'})
425
440
  else:
@@ -428,7 +443,7 @@ class MysqlUpload:
428
443
 
429
444
  # @try_except
430
445
  def df_to_mysql(self, df, db_name, table_name, set_typ=None, icm_update=[], move_insert=False, df_sql=False, drop_duplicates=False,
431
- filename=None, count=None, reset_id=False):
446
+ filename=None, count=None, reset_id=False, default=None):
432
447
  """
433
448
  db_name: 数据库名
434
449
  table_name: 表名
@@ -499,7 +514,22 @@ class MysqlUpload:
499
514
  if col_not_exist: # 数据表中不存在的列
500
515
  for col in col_not_exist:
501
516
  # 创建列,需转义
502
- sql = f"ALTER TABLE `{table_name}` ADD COLUMN `{col}` {dtypes[col]} NOT NULL;"
517
+ if default:
518
+ if dtypes[col] == 'date':
519
+ default = '2000-01-01'
520
+ elif dtypes[col] == 'datetime' or dtypes[col] == 'timestamp':
521
+ default = '2000-01-01 10:00:00'
522
+ elif 'decimal' in dtypes[col]:
523
+ default = 0.0
524
+ elif 'int' in dtypes[col]:
525
+ default = 0
526
+ elif 'varchar' in dtypes[col] or 'text' in dtypes[col]:
527
+ default = ''
528
+ elif 'year' in dtypes[col]:
529
+ default = '2000'
530
+ sql = f"ALTER TABLE `{table_name}` ADD COLUMN `{col}` {dtypes[col]} NOT NULL DEFAULT '{default}';"
531
+ else:
532
+ sql = f"ALTER TABLE `{table_name}` ADD COLUMN `{col}` {dtypes[col]} NOT NULL;"
503
533
  cursor.execute(sql)
504
534
  print(f"添加列: {col}({dtypes[col]})") # 添加列并指定数据类型
505
535
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 3.0.1
3
+ Version: 3.0.2
4
4
  Home-page: https://pypi.org/project/mdbq
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='3.0.1',
6
+ version='3.0.2',
7
7
  author='xigua, ',
8
8
  author_email="2587125111@qq.com",
9
9
  url='https://pypi.org/project/mdbq',
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes