删除千万级mysql数据的脚本(python)


嗯,一个小需求所以写了一个脚本

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Python 3.9.0
# pip install pymysql
'''
@File    :   deletedate.py
@Time    :   2021/11/18 16:05:31
@Author  :   Li Ruilong
@Version :   1.0
@Contact :   1224965096@qq.com
@Desc    :   用于删除千万级mysql数据的脚本,
'''

# here put the import lib


import pymysql.cursors
import time


# 连接MySQL数据库


# 删除的数据量
sqlselect = "select count(*)  as sum from tableName where col1=999;"

# 每次删除的条数
sqldelete = "delete from   tableName where col1=999 limit 1000 "

host='192.168.111.111'
port=3306
user='userName'
password='pass'
db='dbname'
# 通过cursor创建游标 try:     connection = pymysql.connect(host=host, port=port, user=user, password=password,                                  db=db, charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)     cursor = connection.cursor()     print("数据库连接成功============================================", time.strftime(         "%Y-%m-%d %H:%M:%S", time.localtime()), "=========================") except:     print("数据库连接异常============================================", time.strftime(         "%Y-%m-%d %H:%M:%S", time.localtime()), "=========================")

def select(sqlselect):
    cursor.execute(sqlselect)     connection.commit()     global result     result = cursor.fetchone().get("sum")     print("清理的数据条数", result)

def delete(result, sqldelete):     print(result, "开始清理============================================", time.strftime(         "%Y-%m-%d %H:%M:%S", time.localtime()), "=========================")     while result > 10:         try:             cursor.execute(sqldelete)             connection.commit()             result = cursor.fetchone()         except:             cursor.rollback()
        cursor.execute(sqlselect)         connection.commit()         result = cursor.fetchone().get("sum")         print("剩余数据量:", result, "=================================", time.strftime(             "%Y-%m-%d %H:%M:%S", time.localtime()), "=======================")

if __name__ == '__main__':     while True:         print('''             1.自定义配置清理
            2.默认配置清理         ''')         i = input("请选择:\n")         if i == '1':             try:                 host = input("请输入host:\n ")                 port = int(input("请输入port: \n"))                 user = input("请输入db用户名user:\n ")                 password = input("请输入db用户名password:\n ")                 db = input("请输入数据库: \n")                 sqlselect = input(                     "查询数据量SQL:例:select count(*) as sum  from oc_ob_task where SP_ID=999;\n")                 sqldelete = input(                     "批量删除SQL:例:delete from   oc_ob_task where SP_ID=999 limit 10000\n ")                 print("清理SQL============================================", time.strftime(                     "%Y-%m-%d %H:%M:%S", time.localtime()), "=========================")             except:                 print("port必须为数字!")                 continue                   try:                 connection = pymysql.connect(host=host, port=port, user=user, password=password,                                              db=db, charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)                 cursor = connection.cursor()                 print("数据库连接成功============================================", time.strftime(                         "%Y-%m-%d %H:%M:%S", time.localtime()), "=========================")             except:                     print("数据库连接异常============================================", time.strftime(                     "%Y-%m-%d %H:%M:%S", time.localtime()), "=========================")                 break         elif i != '2':             continue           print("\n")         print("连接参数host|port|user|password|db:\n",host,"\n",port,"\n",user,"\n",password,"\n",db,"\n")                   print("查询数据量SQL:", sqlselect, "\n ")         print("批量删除SQL:", sqlselect, "\n ")         boo = input("确实是否清理!(y/n):\n")
        if boo == 'y':              boo = input("确实是否清理!(y/n):\n")              if boo == 'y':                  boo = input("确实是否清理!(y/n):\n")                  if boo == 'y':                     try:                         select(sqlselect)                         delete(result, sqldelete)                     except:                         print("数据库连接异常============================================", time.strftime(                     "%Y-%m-%d %H:%M:%S", time.localtime()), "=========================")                     break                  else:                      print("退出成功")                      continue              else:                  print("退出成功")                  continue         else:             print("退出成功")             continue