批量删除table,只保留最近几天的table

#!/usr/bin/python3
"""
批量删除table,只保留最近几天的table
"""
import  pymysql
import  re

def conn_(host='',usr='',passwd='',db='',port=3306,):
    conn = pymysql.connect(host, usr, passwd, db, port,charset='utf8')
    return  conn

def del_table(conn_,table_pre='',table_suff='%Y%m%d',keep_count=3):
    date_form = None
    if table_suff == "%Y%m%d":
        date_form = "_(\d{4}\d{1,2}\d{1,2})$"
        date_len = 8
    elif table_suff == "%Y-%m-%d":
        date_form = "_(\d{4}-\d{1,2}-\d{1,2})$"
        date_len = 10
    elif table_suff == "%Y%m":
        date_form = "_(\d{4}\d{1,2})$"
        date_len = 6
    elif table_suff == "%Y-%m":
        date_form = "_(\d{4}-\d{1,2})$"
        date_len = 7
    else:
        raise Exception("暂时不支持其他类型的时间后缀")
    curs = conn_.cursor()
    curs.execute('SHOW TABLES')
    data = curs.fetchall()
    table_ = r'%s'%table_pre+date_form
    list_table = []
    i = 0
    for table in data:
        mt = re.search(table_, table[0])
        if mt:
            if len(mt.groups()[0]) == date_len:
                list_table.append((table[0], mt.groups()[0]))
                i += 1
    sorted(list_table, key=lambda date: date[1]) #按照表结构后缀时间升序排序

    for j in range(i-keep_count):
        sql = 'DROP TABLE if exists %s'%list_table[j][0]
        curs.execute(sql)

    curs.close()
    conn_.close()

if __name__ == '__main__':
    table_pre = "tree_product"
    table_suff = "%Y%m%d"
    # table_suff = "%Y-%m-%d"
    # table_suff = "%Y%m"
    # table_suff = "%Y-%m"
    conn=conn_('10.0.0.11','root','sctele@root','sxf',port=3306)
    del_table(conn,table_pre=table_pre,table_suff=table_suff,keep_count=1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值