python 删除大表数据
程序员文章站
2022-09-03 23:17:41
#!/usr/bin/env python # encoding: utf-8 #@author: 东哥加油! #@file: del_tb_bigtable_statistic.py #@time: 2018/11/21 15:39 import pymysql import datetime i... ......
#!/usr/bin/env python
# encoding: utf-8
#@author: 东哥加油!
#@file: del_tb_bigtable_statistic.py
#@time: 2018/11/21 15:39
import pymysql
import datetime
import math
import time
#获取连接
def get_conn():
conn = none
try:
conn = pymysql.connect(
host="192.168.1.2",
port=3306,
user="root",
passwd="mysqlpassword",
charset="utf8",
)
except exception as err:
print(err)
return conn
#查询语句执行
def get_data(sql):
conn = get_conn()
cur = conn.cursor()
cur.execute(sql)
data = cur.fetchall()
conn.close()
return data
#93天前的时间戳
# 2018-07-24 00:00:00 转成毫秒时间戳
def get_pdate_begin(xday):
now_time = datetime.datetime.now()
step_time = datetime.timedelta(days=xday)
yes_time = now_time - step_time
pdate = yes_time.strftime('%y%m%d')
print(pdate)
return pdate
#数据备份,放到tb_bigtable_statistic_hist表中
def data_bak(xday):
print("开始时间:",time.strftime("%y-%m-%d %h:%m:%s", time.localtime()))
conn = get_conn()
cur = conn.cursor()
cidlist = data_zk(xday)
if cidlist == 0:
print('当天无注单')
else:
for cids in cidlist:
try:
sql = '''insert into db_order.tb_bigtable_statistic_hist \
select * from db_order.tb_bigtable_statistic \
where cid in( %s )''' % cids
cur.execute(sql)
conn.commit()
except:
print('备份失败!!!')
conn.rollback()
conn.close()
exit(99)
conn.close()
print("结束时间:", time.strftime("%y-%m-%d %h:%m:%s", time.localtime()))
#组装cid成in的条件(....),5000个cid为一组
def data_zk(xday):
conn = get_conn()
cur = conn.cursor()
cid = get_cid(xday)
var1 = "-999"
i = 0
list = []
if cid.__len__() > 0:
for one in cid:
var1=var1+","+str(one[0])
i=i+1
if(i==2000):
list.append(var1)
var1 = "-999"
i=0
list.append(var1)
return list
else:
return 0
#获取该条件所有的cid
def get_cid(xday):
pdate = get_pdate_begin(xday)
sql = '''select cid
from db_order.tb_bigtable_statistic
where pdate = %s limit 20000''' % (pdate)
cid = get_data(sql)
return cid
#删除数据
def del_data(xday):
print("删除开始时间:", time.strftime("%y-%m-%d %h:%m:%s", time.localtime()))
conn = get_conn()
cur = conn.cursor()
cidlist = data_zk(xday)
if cidlist == 0:
print('当天无注单')
else:
for cids in cidlist:
try:
sql = '''delete from db_order.tb_bigtable_statistic \
where cid in( %s )''' % cids
cur.execute(sql)
conn.commit()
except:
print('备份失败!!!')
conn.rollback()
conn.close()
exit(99)
conn.close()
print("删除结束时间:", time.strftime("%y-%m-%d %h:%m:%s", time.localtime()))
def move_data(xday):
data_bak(xday)
del_data(xday)
if __name__ == '__main__':
move_data(93)