Files
kis_trader/scratch/delete_old_data_pymysql.py

69 lines
2.2 KiB
Python

import sys
import time
import pymysql
conn = pymysql.connect(
host='192.168.0.141',
port=3306,
user='jae',
password='1234',
database='kis_quant_db',
cursorclass=pymysql.cursors.DictCursor,
autocommit=True
)
try:
with conn.cursor() as cur:
cur.execute("SHOW TABLES")
tables = [list(r.values())[0] for r in cur.fetchall()]
target_prefixes = (
'ws_ticks', 'ws_orderbook', 'ws_candles',
'ls_ws_ticks', 'ls_ws_orderbook', 'ls_ws_candles',
'ws_price_validation'
)
for table in tables:
if not table.startswith(target_prefixes):
continue
with conn.cursor() as cur:
cur.execute(f"SHOW COLUMNS FROM {table}")
cols = [r["Field"] for r in cur.fetchall()]
time_col = None
for candidate in ('tick_time', 'ob_time', 'candle_time', 'timestamp', 'recv_ts', 'datetime'):
if candidate in cols:
time_col = candidate
break
if time_col:
cutoff = '20260808'
with conn.cursor() as cur:
count_q = f"SELECT COUNT(*) as cnt FROM {table} WHERE {time_col} < %s"
cur.execute(count_q, (cutoff,))
count = cur.fetchone()['cnt']
if count > 0:
print(f"Deleting {count} rows from {table} (using column {time_col})")
deleted = 0
while True:
with conn.cursor() as cur:
del_q = f"DELETE FROM {table} WHERE {time_col} < %s LIMIT 100000"
cur.execute(del_q, (cutoff,))
rows_affected = cur.rowcount
if rows_affected <= 0:
break
deleted += rows_affected
print(f" ... deleted {deleted}/{count} rows in {table}")
time.sleep(0.01)
print(f"Finished deleting from {table}.")
else:
print(f"No rows to delete in {table} before {cutoff}")
else:
print(f"Warning: No time column found for {table}, columns: {cols}")
finally:
conn.close()