mdbq 3.2.9__py3-none-any.whl → 3.2.11__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.
@@ -52,6 +52,16 @@ if not username:
52
52
  print(f'找不到主机:')
53
53
 
54
54
 
55
+ def get_encoding(path):
56
+ """
57
+ 获取文件的编码方式, 读取速度比较慢,非必要不要使用
58
+ """
59
+ with open(path, 'rb') as f:
60
+ f1 = f.read()
61
+ encod = chardet.detect(f1).get('encoding')
62
+ return encod
63
+
64
+
55
65
  class DatabaseUpdateBak:
56
66
  """
57
67
  清洗文件,并入库,被 tg.py 调用
@@ -1174,12 +1184,53 @@ def upload_dir(path, db_name, collection_name, json_path=None):
1174
1184
  if '更新时间' not in df.columns.tolist():
1175
1185
  df['更新时间'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
1176
1186
 
1187
+ # set_typ = {
1188
+ # '日期': 'date',
1189
+ # '店铺名称': 'varchar(100)',
1190
+ # 'spu_id': 'varchar(100)',
1191
+ # '图片': 'varchar(255)',
1192
+ # '序号': 'smallint',
1193
+ # '商品名称': 'varchar(255)',
1194
+ # '商品款号': 'varchar(255)',
1195
+ # '一级类目名称': 'varchar(255)',
1196
+ # '二级类目名称': 'varchar(255)',
1197
+ # '三级类目名称': 'varchar(255)',
1198
+ # '数据更新时间': 'timestamp',
1199
+ # '更新时间': 'timestamp',
1200
+ # }
1201
+ # new_dict = {
1202
+ # '日期': '',
1203
+ # '店铺名称': '',
1204
+ # '序号': '',
1205
+ # '商品名称': '',
1206
+ # 'spu_id': '',
1207
+ # '商品款号': '',
1208
+ # '一级类目名称': '',
1209
+ # '二级类目名称': '',
1210
+ # '三级类目名称': '',
1211
+ # '访客量': '',
1212
+ # '浏览量': '',
1213
+ # '下单gmv': '',
1214
+ # '成交gmv': '',
1215
+ # '支付人数_成交': '',
1216
+ # }
1217
+ # for dict_data in df.to_dict(orient='records'):
1218
+ # new_dict.update(dict_data)
1219
+ # m.dict_to_mysql(
1220
+ # db_name=db_name,
1221
+ # table_name=collection_name,
1222
+ # dict_data=new_dict,
1223
+ # # icm_update=['日期', '店铺名称', 'spu_id', '商品款号'],
1224
+ # unique_main_key=None,
1225
+ # set_typ=set_typ,
1226
+ # )
1177
1227
  m.df_to_mysql(df=df, db_name=db_name, table_name=collection_name,
1178
1228
  move_insert=False, # 先删除,再插入
1179
1229
  df_sql = True,
1180
1230
  drop_duplicates=False,
1181
1231
  count=f'{i}/{count}',
1182
1232
  filename=name,
1233
+ set_typ={},
1183
1234
  )
1184
1235
  # nas.df_to_mysql(df=df, db_name=db_name, table_name=collection_name, drop_duplicates=True,)
1185
1236
 
@@ -1195,20 +1246,22 @@ def one_file_to_mysql(file, db_name, table_name):
1195
1246
  if file.endswith('.xlsx'):
1196
1247
  df = pd.read_excel(file)
1197
1248
  else:
1198
- df = pd.read_csv(file, encoding='utf-8_sig', header=0, na_filter=False, float_precision='high')
1249
+ encod = get_encoding(file)
1250
+ df = pd.read_csv(file, encoding=encod, header=0, na_filter=False, float_precision='high')
1199
1251
  # df.replace(to_replace=[','], value='', regex=True, inplace=True) # 替换掉特殊字符
1200
1252
  m = mysql.MysqlUpload(username=username, password=password, host=host, port=port)
1253
+ # df.pop('id')
1201
1254
  m.df_to_mysql(
1202
1255
  df=df,
1203
1256
  db_name=db_name,
1204
1257
  table_name=table_name,
1205
1258
  # icm_update=['sku_id'], # 增量更新, 在聚合数据中使用,其他不要用
1206
- move_insert=False, # 先删除,再插入
1259
+ move_insert=True, # 先删除,再插入
1207
1260
  df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
1208
1261
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
1209
1262
  count=None,
1210
1263
  filename=None, # 用来追踪处理进度
1211
- # reset_id=False, # 是否重置自增列
1264
+ reset_id=True, # 是否重置自增列
1212
1265
  # set_typ=set_typ,
1213
1266
  )
1214
1267
 
@@ -1278,25 +1331,24 @@ if __name__ == '__main__':
1278
1331
  # password = ''
1279
1332
  # host = ''
1280
1333
  # port = ''
1281
- #
1282
- # # 上传 1 个文件到数据库
1283
- # one_file_to_mysql(
1284
- # file=r'/Users/xigua/Downloads/城市等级.csv',
1285
- # db_name='属性设置3',
1286
- # table_name='城市等级',
1287
- # )
1288
1334
 
1335
+ # 上传 1 个文件到数据库
1336
+ one_file_to_mysql(
1337
+ file=r'/Users/xigua/Downloads/日期表.csv',
1338
+ db_name='聚合数据test',
1339
+ table_name='日期表',
1340
+ )
1289
1341
 
1290
- col = 1
1291
- if col:
1292
- # 上传一个目录到指定数据库
1293
- db_name = '爱库存2'
1294
- table_name = '商品spu榜单'
1295
- upload_dir(
1296
- path=r'/Users/xigua/Downloads/数据上传中心',
1297
- db_name=db_name,
1298
- collection_name=table_name,
1299
- )
1300
1342
 
1343
+ # col = 1
1344
+ # if col:
1345
+ # # 上传一个目录到指定数据库
1346
+ # db_name = '爱库存2'
1347
+ # table_name = '商品spu榜单'
1348
+ # upload_dir(
1349
+ # path=r'/Users/xigua/Downloads/数据上传中心',
1350
+ # db_name=db_name,
1351
+ # collection_name=table_name,
1352
+ # )
1301
1353
 
1302
1354
 
@@ -59,6 +59,7 @@ class MysqlDatasQuery:
59
59
  self.update_service = True # 调试时加,true: 将数据写入 mysql 服务器
60
60
  self.pf_datas = []
61
61
  self.pf_datas_jd = [] # 京东聚合销售表
62
+ self.output = set_support.SetSupport(dirname='support')
62
63
 
63
64
  @staticmethod
64
65
  def try_except(func): # 在类内部定义一个异常处理方法
@@ -196,9 +197,8 @@ class MysqlDatasQuery:
196
197
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
197
198
  count=None,
198
199
  filename=None, # 用来追踪处理进度
199
- reset_id=False, # 是否重置自增列
200
+ reset_id=True, # 是否重置自增列
200
201
  set_typ=set_typ,
201
-
202
202
  )
203
203
 
204
204
  # df_pic:商品排序索引表, 给 powerbi 中的主推款排序用的,(从上月1号到今天的总花费进行排序)
@@ -337,7 +337,7 @@ class MysqlDatasQuery:
337
337
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
338
338
  count=None,
339
339
  filename=None, # 用来追踪处理进度
340
- reset_id=False, # 是否重置自增列
340
+ reset_id=True, # 是否重置自增列
341
341
  set_typ=set_typ,
342
342
  )
343
343
  return True
@@ -477,7 +477,7 @@ class MysqlDatasQuery:
477
477
  df['人群分类'].fillna('', inplace=True)
478
478
  if '人群分类' in df.columns.tolist():
479
479
  # 这行决定了,从文件中读取的分类信息优先级高于内部函数的分类规则
480
- # 这个 lambda 适配人群名字中带有特定标识的分类,强匹配
480
+ # 这个 lambda 适配人群名字中带有特定标识的分类,强匹配,自定义命名
481
481
  df['人群分类'] = df.apply(
482
482
  lambda x: self.set_crowd(keyword=str(x['人群名字']), as_file=False) if x['人群分类'] == ''
483
483
  else x['人群分类'], axis=1
@@ -527,7 +527,7 @@ class MysqlDatasQuery:
527
527
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
528
528
  count=None,
529
529
  filename=None, # 用来追踪处理进度
530
- reset_id=False, # 是否重置自增列
530
+ reset_id=True, # 是否重置自增列
531
531
  set_typ=set_typ,
532
532
  )
533
533
  return True
@@ -663,7 +663,7 @@ class MysqlDatasQuery:
663
663
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
664
664
  count=None,
665
665
  filename=None, # 用来追踪处理进度
666
- reset_id=False, # 是否重置自增列
666
+ reset_id=True, # 是否重置自增列
667
667
  set_typ=set_typ,
668
668
  )
669
669
  return True
@@ -787,7 +787,7 @@ class MysqlDatasQuery:
787
787
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
788
788
  count=None,
789
789
  filename=None, # 用来追踪处理进度
790
- reset_id=False, # 是否重置自增列
790
+ reset_id=True, # 是否重置自增列
791
791
  set_typ=set_typ,
792
792
  )
793
793
  return True
@@ -900,7 +900,7 @@ class MysqlDatasQuery:
900
900
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
901
901
  count=None,
902
902
  filename=None, # 用来追踪处理进度
903
- reset_id=False, # 是否重置自增列
903
+ reset_id=True, # 是否重置自增列
904
904
  set_typ=set_typ,
905
905
  )
906
906
  return True
@@ -957,7 +957,7 @@ class MysqlDatasQuery:
957
957
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
958
958
  count=None,
959
959
  filename=None, # 用来追踪处理进度
960
- reset_id=False, # 是否重置自增列
960
+ reset_id=True, # 是否重置自增列
961
961
  set_typ=set_typ,
962
962
  )
963
963
  return True
@@ -1016,7 +1016,6 @@ class MysqlDatasQuery:
1016
1016
  filename=None, # 用来追踪处理进度
1017
1017
  reset_id=False, # 是否重置自增列
1018
1018
  set_typ=set_typ,
1019
-
1020
1019
  )
1021
1020
  return True
1022
1021
 
@@ -1123,7 +1122,7 @@ class MysqlDatasQuery:
1123
1122
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
1124
1123
  count=None,
1125
1124
  filename=None, # 用来追踪处理进度
1126
- reset_id=False, # 是否重置自增列
1125
+ reset_id=True, # 是否重置自增列
1127
1126
  set_typ=set_typ,
1128
1127
  )
1129
1128
  return True
@@ -1172,7 +1171,6 @@ class MysqlDatasQuery:
1172
1171
  filename=None, # 用来追踪处理进度
1173
1172
  reset_id=False, # 是否重置自增列
1174
1173
  set_typ=set_typ,
1175
-
1176
1174
  )
1177
1175
  return True
1178
1176
 
@@ -1276,7 +1274,7 @@ class MysqlDatasQuery:
1276
1274
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
1277
1275
  count=None,
1278
1276
  filename=None, # 用来追踪处理进度
1279
- reset_id=False, # 是否重置自增列
1277
+ reset_id=True, # 是否重置自增列
1280
1278
  set_typ=set_typ,
1281
1279
 
1282
1280
  )
@@ -1311,7 +1309,7 @@ class MysqlDatasQuery:
1311
1309
  # drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
1312
1310
  # count=None,
1313
1311
  # filename=None, # 用来追踪处理进度
1314
- # reset_id=False, # 是否重置自增列
1312
+ # reset_id=True, # 是否重置自增列
1315
1313
  # set_typ=set_typ,
1316
1314
  #
1317
1315
  # )
@@ -1380,7 +1378,7 @@ class MysqlDatasQuery:
1380
1378
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
1381
1379
  count=None,
1382
1380
  filename=None, # 用来追踪处理进度
1383
- reset_id=False, # 是否重置自增列
1381
+ reset_id=True, # 是否重置自增列
1384
1382
  set_typ=set_typ,
1385
1383
 
1386
1384
  )
@@ -1482,7 +1480,7 @@ class MysqlDatasQuery:
1482
1480
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
1483
1481
  count=None,
1484
1482
  filename=None, # 用来追踪处理进度
1485
- reset_id=False, # 是否重置自增列
1483
+ reset_id=True, # 是否重置自增列
1486
1484
  set_typ=set_typ,
1487
1485
 
1488
1486
  )
@@ -1557,7 +1555,7 @@ class MysqlDatasQuery:
1557
1555
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
1558
1556
  count=None,
1559
1557
  filename=None, # 用来追踪处理进度
1560
- reset_id=False, # 是否重置自增列
1558
+ reset_id=True, # 是否重置自增列
1561
1559
  set_typ=set_typ,
1562
1560
  )
1563
1561
  return True
@@ -1623,7 +1621,7 @@ class MysqlDatasQuery:
1623
1621
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
1624
1622
  count=None,
1625
1623
  filename=None, # 用来追踪处理进度
1626
- reset_id=False, # 是否重置自增列
1624
+ reset_id=True, # 是否重置自增列
1627
1625
  set_typ=set_typ,
1628
1626
 
1629
1627
  )
@@ -1707,9 +1705,8 @@ class MysqlDatasQuery:
1707
1705
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
1708
1706
  count=None,
1709
1707
  filename=None, # 用来追踪处理进度
1710
- reset_id=False, # 是否重置自增列
1708
+ reset_id=True, # 是否重置自增列
1711
1709
  set_typ=set_typ,
1712
-
1713
1710
  )
1714
1711
  return True
1715
1712
 
@@ -2207,7 +2204,7 @@ class MysqlDatasQuery:
2207
2204
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
2208
2205
  count=None,
2209
2206
  filename=None, # 用来追踪处理进度
2210
- reset_id=False, # 是否重置自增列
2207
+ reset_id=True, # 是否重置自增列
2211
2208
  set_typ=set_typ,
2212
2209
 
2213
2210
  )
@@ -2288,46 +2285,46 @@ class MysqlDatasQuery:
2288
2285
  max_date = df['日期'].max()
2289
2286
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
2290
2287
  print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
2291
- new_dict = {
2292
- '日期': '',
2293
- '店铺名称': '',
2294
- '序号': '',
2295
- '商品名称': '',
2296
- 'spu_id': '',
2297
- '商品款号': '',
2298
- '一级类目名称': '',
2299
- '二级类目名称': '',
2300
- '三级类目名称': '',
2301
- '访客量': '',
2302
- '浏览量': '',
2303
- '下单gmv': '',
2304
- '成交gmv': '',
2305
- '支付人数_成交': '',
2306
- }
2307
- for dict_data in df.to_dict(orient='records'):
2308
- new_dict.update(dict_data)
2309
- m_engine.dict_to_mysql(
2310
- db_name='爱库存2',
2311
- table_name='商品spu榜单',
2312
- dict_data=new_dict,
2313
- icm_update=['日期', '店铺名称', 'spu_id', '商品款号'],
2314
- unique_main_key=None,
2315
- set_typ=set_typ,
2316
- )
2317
- # m_engine.df_to_mysql(
2318
- # df=df,
2319
- # db_name=db_name,
2320
- # table_name=table_name,
2321
- # icm_update=[], # 增量更新, 在聚合数据中使用,其他不要用
2322
- # move_insert=True, # 先删除,再插入
2323
- # df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
2324
- # drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
2325
- # count=None,
2326
- # filename=None, # 用来追踪处理进度
2327
- # reset_id=False, # 是否重置自增列
2328
- # set_typ=set_typ,
2329
- #
2330
- # )
2288
+ # new_dict = {
2289
+ # '日期': '',
2290
+ # '店铺名称': '',
2291
+ # '序号': '',
2292
+ # '商品名称': '',
2293
+ # 'spu_id': '',
2294
+ # '商品款号': '',
2295
+ # '一级类目名称': '',
2296
+ # '二级类目名称': '',
2297
+ # '三级类目名称': '',
2298
+ # '访客量': '',
2299
+ # '浏览量': '',
2300
+ # '下单gmv': '',
2301
+ # '成交gmv': '',
2302
+ # '支付人数_成交': '',
2303
+ # }
2304
+ # for dict_data in df.to_dict(orient='records'):
2305
+ # new_dict.update(dict_data)
2306
+ # m_engine.dict_to_mysql(
2307
+ # db_name=db_name,
2308
+ # table_name=table_name,
2309
+ # dict_data=new_dict,
2310
+ # icm_update=['日期', '店铺名称', 'spu_id', '商品款号'],
2311
+ # unique_main_key=None,
2312
+ # set_typ=set_typ,
2313
+ # )
2314
+ m_engine.df_to_mysql(
2315
+ df=df,
2316
+ db_name=db_name,
2317
+ table_name=table_name,
2318
+ icm_update=[], # 增量更新, 在聚合数据中使用,其他不要用
2319
+ move_insert=True, # 先删除,再插入
2320
+ df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
2321
+ drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
2322
+ count=None,
2323
+ filename=None, # 用来追踪处理进度
2324
+ reset_id=True, # 是否重置自增列
2325
+ set_typ=set_typ,
2326
+
2327
+ )
2331
2328
  return True
2332
2329
 
2333
2330
  def deeplink(self, db_name='聚合数据', table_name='达摩盘_deeplink人群洞察'):
@@ -2377,7 +2374,7 @@ class MysqlDatasQuery:
2377
2374
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
2378
2375
  count=None,
2379
2376
  filename=None, # 用来追踪处理进度
2380
- reset_id=False, # 是否重置自增列
2377
+ reset_id=True, # 是否重置自增列
2381
2378
  set_typ=set_typ,
2382
2379
 
2383
2380
  )
@@ -2490,7 +2487,7 @@ class MysqlDatasQuery:
2490
2487
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
2491
2488
  count=None,
2492
2489
  filename=None, # 用来追踪处理进度
2493
- reset_id=False, # 是否重置自增列
2490
+ reset_id=True, # 是否重置自增列
2494
2491
  set_typ=set_typ,
2495
2492
  )
2496
2493
  return True
@@ -2739,6 +2736,7 @@ class MysqlDatasQuery:
2739
2736
  '机会',
2740
2737
  '推荐',
2741
2738
  '智能定向',
2739
+ 'AI',
2742
2740
  ]
2743
2741
  },
2744
2742
  {
@@ -2900,7 +2898,7 @@ class MysqlDatasQuery:
2900
2898
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
2901
2899
  count=None,
2902
2900
  filename=None, # 用来追踪处理进度
2903
- reset_id=False, # 是否重置自增列
2901
+ reset_id=True, # 是否重置自增列
2904
2902
  set_typ=set_typ,
2905
2903
  )
2906
2904
  return True
@@ -3010,7 +3008,7 @@ class MysqlDatasQuery:
3010
3008
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
3011
3009
  count=None,
3012
3010
  filename=None, # 用来追踪处理进度
3013
- reset_id=False, # 是否重置自增列
3011
+ reset_id=True, # 是否重置自增列
3014
3012
  set_typ=set_typ,
3015
3013
  )
3016
3014
  return True
@@ -3081,7 +3079,7 @@ class MysqlDatasQuery:
3081
3079
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
3082
3080
  count=None,
3083
3081
  filename=None, # 用来追踪处理进度
3084
- reset_id=False, # 是否重置自增列
3082
+ reset_id=True, # 是否重置自增列
3085
3083
  set_typ=set_typ,
3086
3084
  )
3087
3085
  return True
@@ -3310,7 +3308,7 @@ if __name__ == '__main__':
3310
3308
  # future_to_function = {
3311
3309
  # executor.submit(
3312
3310
  # func_query,
3313
- # months=3,
3311
+ # months=1,
3314
3312
  # less_dict=[],
3315
3313
  # ),
3316
3314
  # }
@@ -3318,7 +3316,7 @@ if __name__ == '__main__':
3318
3316
  # 3. 清理聚合数据
3319
3317
  optimize_data.op_data(
3320
3318
  db_name_lists=['聚合数据'],
3321
- days=3650, # 清理聚合数据的日期长度
3319
+ days=100, # 清理聚合数据的日期长度
3322
3320
  is_mongo=False,
3323
3321
  is_mysql=True,
3324
3322
  )
mdbq/mysql/mysql.py CHANGED
@@ -398,6 +398,9 @@ class MysqlUpload:
398
398
  df.replace(to_replace=['"'], value='', regex=True, inplace=True)
399
399
  cols = df.columns.tolist()
400
400
  for col in cols:
401
+ if col == 'id':
402
+ df.pop('id')
403
+ continue
401
404
  df[col] = df[col].apply(lambda x: float(re.sub(r'%$', '', str(x))) / 100 if (
402
405
  str(x) != '' and str(x).endswith('%')) and not re.findall('[\\u4e00-\\u9fa5]', str(x)) else '0.0' if str(x) == '0%' else x)
403
406
  try:
@@ -587,18 +590,29 @@ class MysqlUpload:
587
590
  )
588
591
  if reset_id:
589
592
  pass
590
- # # 6. 重置自增列
591
- # try:
592
- # cursor.execute(f"SHOW COLUMNS FROM {table_name} LIKE 'id'")
593
- # result = cursor.fetchone()
594
- # if result:
595
- # cursor.execute(f"ALTER TABLE {table_name} DROP COLUMN id;") # 删除 id 列
596
- # cursor.execute(
597
- # f"ALTER TABLE {table_name} ADD column id INT AUTO_INCREMENT PRIMARY KEY FIRST;")
598
- # cursor.execute(f"ALTER TABLE {table_name} AUTO_INCREMENT = 1") # 设置自增从 1 开始
599
- # except Exception as e:
600
- # print(f'{e}')
601
- # connection.rollback()
593
+ # 6. 重置自增列
594
+ try:
595
+ # 查询所有复合主键
596
+ sql = (
597
+ f"SELECT `COLUMN_NAME` AS `PrimaryKey` FROM `information_schema`.`COLUMNS` "
598
+ f"WHERE `TABLE_SCHEMA` = '{db_name}'AND `TABLE_NAME` = '{table_name}' AND `COLUMN_KEY` = 'PRI';"
599
+ )
600
+ cursor.execute(sql)
601
+ result = cursor.fetchall() # 复合主键数
602
+ if len(result) <= 1: # 如果存在复合主键,则不能直接删除 id 键,其他主键可能不是唯一,会报错
603
+ cursor.execute(f"SHOW COLUMNS FROM {table_name} LIKE 'id'")
604
+ result = cursor.fetchone()
605
+ if result:
606
+ cursor.execute(f"ALTER TABLE {table_name} DROP COLUMN id;") # 删除 id 列
607
+ cursor.execute(
608
+ f"ALTER TABLE {table_name} ADD column id INT AUTO_INCREMENT PRIMARY KEY FIRST;")
609
+ cursor.execute(f"ALTER TABLE {table_name} AUTO_INCREMENT = 1") # 设置自增从 1 开始
610
+ # print(f'重置自增id')
611
+ else:
612
+ print(f'{table_name} 当前表存在复合主键: {result}, 无法重置自增id')
613
+ except Exception as e:
614
+ print(f'{e}')
615
+ connection.rollback()
602
616
  connection.commit() # 提交事务
603
617
  connection.close()
604
618
  return
@@ -607,8 +621,11 @@ class MysqlUpload:
607
621
  if move_insert and '日期' in df.columns.tolist():
608
622
  # 移除数据
609
623
  dates = df['日期'].values.tolist()
624
+ # print(dates)
625
+ dates = [pd.to_datetime(item) for item in dates] # 需要先转换类型才能用 min, max
610
626
  start_date = pd.to_datetime(min(dates)).strftime('%Y-%m-%d')
611
627
  end_date = (pd.to_datetime(max(dates)) + datetime.timedelta(days=1)).strftime('%Y-%m-%d')
628
+
612
629
  sql = f"DELETE FROM `{table_name}` WHERE {'日期'} BETWEEN '%s' AND '%s'" % (start_date, end_date)
613
630
  cursor.execute(sql)
614
631
  connection.commit()
@@ -625,18 +642,28 @@ class MysqlUpload:
625
642
  )
626
643
  # 6. 重置自增列
627
644
  if reset_id:
628
- pass
629
- # try:
630
- # cursor.execute(f"SHOW COLUMNS FROM `{table_name}` LIKE 'id'")
631
- # result = cursor.fetchone()
632
- # if result:
633
- # cursor.execute(f"ALTER TABLE `{table_name}` DROP COLUMN id;") # 删除 id 列
634
- # cursor.execute(
635
- # f"ALTER TABLE `{table_name}` ADD column id INT AUTO_INCREMENT PRIMARY KEY FIRST;")
636
- # cursor.execute(f"ALTER TABLE `{table_name}` AUTO_INCREMENT = 1") # 设置自增从 1 开始
637
- # except Exception as e:
638
- # print(f'{e}')
639
- # connection.rollback()
645
+ try:
646
+ # 查询所有复合主键
647
+ sql = (
648
+ f"SELECT `COLUMN_NAME` AS `PrimaryKey` FROM `information_schema`.`COLUMNS` "
649
+ f"WHERE `TABLE_SCHEMA` = '{db_name}'AND `TABLE_NAME` = '{table_name}' AND `COLUMN_KEY` = 'PRI';"
650
+ )
651
+ cursor.execute(sql)
652
+ result = cursor.fetchall() # 复合主键数
653
+ if len(result) <= 1: # 如果存在复合主键,则不能直接删除 id 键,其他主键可能不是唯一,会报错
654
+ cursor.execute(f"SHOW COLUMNS FROM {table_name} LIKE 'id'")
655
+ result = cursor.fetchone()
656
+ if result:
657
+ cursor.execute(f"ALTER TABLE {table_name} DROP COLUMN id;") # 删除 id 列
658
+ cursor.execute(
659
+ f"ALTER TABLE {table_name} ADD column id INT AUTO_INCREMENT PRIMARY KEY FIRST;")
660
+ cursor.execute(f"ALTER TABLE {table_name} AUTO_INCREMENT = 1") # 设置自增从 1 开始
661
+ # print(f'重置自增id')
662
+ else:
663
+ print(f'{table_name} 当前表存在复合主键: {result}, 无法重置自增id')
664
+ except Exception as e:
665
+ print(f'{e}')
666
+ connection.rollback()
640
667
  connection.close()
641
668
  return
642
669
 
@@ -730,18 +757,30 @@ class MysqlUpload:
730
757
  # print(f'mysql -> df_to_mysql 报错: {e}, {self.filename}')
731
758
  # breakpoint()
732
759
 
733
- # # 6. 重置自增列
734
- # try:
735
- # cursor.execute(f"SHOW COLUMNS FROM `{table_name}` LIKE 'id'")
736
- # result = cursor.fetchone()
737
- # if result:
738
- # cursor.execute(f"ALTER TABLE `{table_name}` DROP COLUMN id;") # 删除 id 列
739
- # cursor.execute(
740
- # f"ALTER TABLE `{table_name}` ADD column id INT AUTO_INCREMENT PRIMARY KEY FIRST;")
741
- # cursor.execute(f"ALTER TABLE `{table_name}` AUTO_INCREMENT = 1") # 设置自增从 1 开始
742
- # except Exception as e:
743
- # print(f'{table_name}, -> {e}')
744
- # connection.rollback()
760
+ # 6. 重置自增列
761
+ if reset_id:
762
+ try:
763
+ # 查询所有复合主键
764
+ sql = (
765
+ f"SELECT `COLUMN_NAME` AS `PrimaryKey` FROM `information_schema`.`COLUMNS` "
766
+ f"WHERE `TABLE_SCHEMA` = '{db_name}'AND `TABLE_NAME` = '{table_name}' AND `COLUMN_KEY` = 'PRI';"
767
+ )
768
+ cursor.execute(sql)
769
+ result = cursor.fetchall() # 复合主键数
770
+ if len(result) <= 1: # 如果存在复合主键,则不能直接删除 id 键,其他主键可能不是唯一,会报错
771
+ cursor.execute(f"SHOW COLUMNS FROM {table_name} LIKE 'id'")
772
+ result = cursor.fetchone()
773
+ if result:
774
+ cursor.execute(f"ALTER TABLE {table_name} DROP COLUMN id;") # 删除 id 列
775
+ cursor.execute(
776
+ f"ALTER TABLE {table_name} ADD column id INT AUTO_INCREMENT PRIMARY KEY FIRST;")
777
+ cursor.execute(f"ALTER TABLE {table_name} AUTO_INCREMENT = 1") # 设置自增从 1 开始
778
+ # print(f'重置自增id')
779
+ else:
780
+ print(f'{table_name} 当前表存在复合主键: {result}, 无法重置自增id')
781
+ except Exception as e:
782
+ print(f'{e}')
783
+ connection.rollback()
745
784
  connection.commit() # 提交事务
746
785
  connection.close()
747
786
 
@@ -979,18 +1018,29 @@ class OptimizeDatas:
979
1018
  else: # 不存在日期列的情况
980
1019
  self.delete_duplicate2(table_name=table_name, except_key=except_key)
981
1020
 
982
- # # 5. 重置自增列 (id 列)
983
- # try:
984
- # cursor.execute(f"SHOW COLUMNS FROM `{table_name}` LIKE 'id'")
985
- # result = cursor.fetchone()
986
- # if result:
987
- # cursor.execute(f"ALTER TABLE `{table_name}` DROP COLUMN id;") # 删除 id 列
988
- # cursor.execute(
989
- # f"ALTER TABLE `{table_name}` ADD column id INT AUTO_INCREMENT PRIMARY KEY FIRST;")
990
- # cursor.execute(f"ALTER TABLE `{table_name}` AUTO_INCREMENT = 1") # 设置自增从 1 开始
991
- # except Exception as e:
992
- # print(f'{e}')
993
- # self.connection.rollback()
1021
+ # 6. 重置自增列
1022
+ try:
1023
+ # 查询所有复合主键
1024
+ sql = (
1025
+ f"SELECT `COLUMN_NAME` AS `PrimaryKey` FROM `information_schema`.`COLUMNS` "
1026
+ f"WHERE `TABLE_SCHEMA` = '{self.db_name}'AND `TABLE_NAME` = '{table_name}' AND `COLUMN_KEY` = 'PRI';"
1027
+ )
1028
+ cursor.execute(sql)
1029
+ result = cursor.fetchall() # 复合主键数
1030
+ if len(result) <= 1: # 如果存在复合主键,则不能直接删除 id 键,其他主键可能不是唯一,会报错
1031
+ cursor.execute(f"SHOW COLUMNS FROM {table_name} LIKE 'id'")
1032
+ result = cursor.fetchone()
1033
+ if result:
1034
+ cursor.execute(f"ALTER TABLE {table_name} DROP COLUMN id;") # 删除 id 列
1035
+ cursor.execute(
1036
+ f"ALTER TABLE {table_name} ADD column id INT AUTO_INCREMENT PRIMARY KEY FIRST;")
1037
+ cursor.execute(f"ALTER TABLE {table_name} AUTO_INCREMENT = 1") # 设置自增从 1 开始
1038
+ # print(f'重置自增id')
1039
+ else:
1040
+ print(f'{table_name} 当前表存在复合主键: {result}, 无法重置自增id')
1041
+ except Exception as e:
1042
+ print(f'{e}')
1043
+ self.connection.rollback()
994
1044
  self.connection.close()
995
1045
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S ")
996
1046
  print(f'{now}mysql({self.host}: {self.port}) {self.db_name} 数据库优化完成!')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 3.2.9
3
+ Version: 3.2.11
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1,11 +1,11 @@
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=ygQYYbxTn7utNPgwiz6MmBSWlq5JrXB-2NU0V75b6Us,74640
4
+ mdbq/aggregation/aggregation.py,sha256=ifactmmJYkm0UUgQG9rn6ledHnc1eFXXPdDywdB-690,76622
5
5
  mdbq/aggregation/df_types.py,sha256=U9i3q2eRPTDY8qAPTw7irzu-Tlg4CIySW9uYro81wdk,8125
6
6
  mdbq/aggregation/mysql_types.py,sha256=YTGyrF9vcRgfkQbpT-e-JdJ7c7VF1dDHgyx9YZRES8w,10934
7
7
  mdbq/aggregation/optimize_data.py,sha256=RXIv7cACCgYyehAxMjUYi_S7rVyjIwXKWMaM3nduGtA,3068
8
- mdbq/aggregation/query_data.py,sha256=yU-PUMY5mTKAhGTH9yCe897MzSRme2toCJBqXaUrJUQ,148223
8
+ mdbq/aggregation/query_data.py,sha256=lXJMlyHM9cSVD7rgf4dHR5NZwMXPt3OjM1Q91DYwbZc,148259
9
9
  mdbq/aggregation/query_data_bak.py,sha256=r1FU0C4zjXln7oVSrRkElh4Ehl-9mYhGcq57jLbViUA,104071
10
10
  mdbq/aggregation/query_data_bak20241124.py,sha256=oY95ZK3qt3Wx9pdZKZ5cvDh45Yi5yGj1kl8G6riumHA,144513
11
11
  mdbq/bdup/__init__.py,sha256=AkhsGk81SkG1c8FqDH5tRq-8MZmFobVbN60DTyukYTY,28
@@ -28,7 +28,7 @@ mdbq/log/mylogger.py,sha256=oaT7Bp-Hb9jZt52seP3ISUuxVcI19s4UiqTeouScBO0,3258
28
28
  mdbq/mongo/__init__.py,sha256=SILt7xMtQIQl_m-ik9WLtJSXIVf424iYgCfE_tnQFbw,13
29
29
  mdbq/mongo/mongo.py,sha256=v9qvrp6p1ZRWuPpbSilqveiE0FEcZF7U5xUPI0RN4xs,31880
30
30
  mdbq/mysql/__init__.py,sha256=A_DPJyAoEvTSFojiI2e94zP0FKtCkkwKP1kYUCSyQzo,11
31
- mdbq/mysql/mysql.py,sha256=z3RXzPiVQzJzPBoyLr1XL5QXAtXehjbkxWVoBCQBaqY,64373
31
+ mdbq/mysql/mysql.py,sha256=-mM51DUH2BWjRSF1ySPFGxMq1fIi5vI9UwAH5X1-nQ4,67760
32
32
  mdbq/mysql/recheck_mysql.py,sha256=rgTpvDMWYTyEn7UQdlig-pdXDluTgiU8JG6lkMh8DV0,8665
33
33
  mdbq/mysql/s_query.py,sha256=MbIprZ4yJDAZ9AahZPzl7hqS695Vs0P-AJNwAtA_EEc,9287
34
34
  mdbq/mysql/year_month_day.py,sha256=VgewoE2pJxK7ErjfviL_SMTN77ki8GVbTUcao3vFUCE,1523
@@ -46,7 +46,7 @@ mdbq/req_post/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
46
46
  mdbq/req_post/req_tb.py,sha256=qg7pet73IgKGmCwxaeUyImJIoeK_pBQT9BBKD7fkBNg,36160
47
47
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
48
48
  mdbq/spider/aikucun.py,sha256=nIKKZOZbemKqcrikcrMmtksLgJjjzeU0I99teBgU1jE,22439
49
- mdbq-3.2.9.dist-info/METADATA,sha256=VVlPtpTiP4PO4M02keRDAf3m98dzf8_noBXsu_TV-L0,243
50
- mdbq-3.2.9.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
51
- mdbq-3.2.9.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
52
- mdbq-3.2.9.dist-info/RECORD,,
49
+ mdbq-3.2.11.dist-info/METADATA,sha256=dRsOoo5Ocv2miwmeKzk3OMkmgBfN0LKuQ7fnj6YqtJQ,244
50
+ mdbq-3.2.11.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
51
+ mdbq-3.2.11.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
52
+ mdbq-3.2.11.dist-info/RECORD,,
File without changes