删除过期数据

This commit is contained in:
2025-08-12 11:13:14 +08:00
parent ab5f78cc7b
commit 109a5e9444
3 changed files with 81 additions and 1 deletions

View File

@@ -19,5 +19,5 @@ DB_URL = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}'
SHOW_SQL = False SHOW_SQL = False
Engine = create_engine(DB_URL, echo=SHOW_SQL) Engine = create_engine(DB_URL, echo=SHOW_SQL)
Base = declarative_base(Engine) Base = declarative_base()
MysqlSession = sessionmaker(bind=Engine) MysqlSession = sessionmaker(bind=Engine)

64
delete_deprecated_data.py Normal file
View File

@@ -0,0 +1,64 @@
# 删除本地数据库中的过期数据
import logging.config
from datetime import datetime, timedelta
from db import MysqlSession
from db.mysql import ZxPhhd, ZxIeCost, ZxIeDischarge, ZxIeResult, ZxIeSettlement, ZxPhrec
from log import LOGGING_CONFIG
# 过期时间
EXPIRATION_DAYS = 180
# 批量删除数量
BATCH_SIZE = 5000
# 数据库会话对象
session = None
def batch_delete_by_pk_phhd(model, pk_phhds):
"""
批量删除指定模型中主键在指定列表中的数据
参数:
modelSQLAlchemy模型类对应数据库表
pk_phhds待删除的主键值列表
返回:
删除的记录数量
"""
delete_count = (
session.query(model)
.filter(model.pk_phhd.in_(pk_phhds))
.delete(synchronize_session=False)
)
session.commit()
logging.getLogger("sql").info(f"{model.__tablename__}成功删除{delete_count}条数据")
return delete_count
if __name__ == '__main__':
logging.config.dictConfig(LOGGING_CONFIG)
deadline = datetime.now() - timedelta(days=EXPIRATION_DAYS)
session = MysqlSession()
try:
while 1:
phhds = (session.query(ZxPhhd.pk_phhd)
.filter(ZxPhhd.paint_flag == "9")
.filter(ZxPhhd.billdate < deadline)
.limit(BATCH_SIZE)
.all())
if not phhds or len(phhds) <= 0:
# 没有符合条件的数据,退出循环
break
pk_phhd_values = [phhd.pk_phhd for phhd in phhds]
logging.getLogger("sql").info(f"过期的pk_phhd有{','.join(map(str, pk_phhd_values))}")
batch_delete_by_pk_phhd(ZxPhrec, pk_phhd_values)
batch_delete_by_pk_phhd(ZxIeResult, pk_phhd_values)
batch_delete_by_pk_phhd(ZxIeSettlement, pk_phhd_values)
batch_delete_by_pk_phhd(ZxIeDischarge, pk_phhd_values)
batch_delete_by_pk_phhd(ZxIeCost, pk_phhd_values)
batch_delete_by_pk_phhd(ZxPhhd, pk_phhd_values)
except Exception as e:
session.rollback()
logging.getLogger('error').error('过期数据删除失败!', exc_info=e)
finally:
session.close()

View File

@@ -8,6 +8,7 @@ LOG_PATHS = [
f"log/{HOSTNAME}/ucloud", f"log/{HOSTNAME}/ucloud",
f"log/{HOSTNAME}/error", f"log/{HOSTNAME}/error",
f"log/{HOSTNAME}/qr", f"log/{HOSTNAME}/qr",
f"log/{HOSTNAME}/sql",
] ]
for path in LOG_PATHS: for path in LOG_PATHS:
if not os.path.exists(path): if not os.path.exists(path):
@@ -74,6 +75,16 @@ LOGGING_CONFIG = {
'backupCount': 14, 'backupCount': 14,
'encoding': 'utf-8', 'encoding': 'utf-8',
}, },
'sql': {
'class': 'logging.handlers.TimedRotatingFileHandler',
'level': 'INFO',
'formatter': 'standard',
'filename': f'log/{HOSTNAME}/sql/fcb_photo_review_sql.log',
'when': 'midnight',
'interval': 1,
'backupCount': 14,
'encoding': 'utf-8',
},
}, },
# loggers定义了日志记录器 # loggers定义了日志记录器
@@ -98,5 +109,10 @@ LOGGING_CONFIG = {
'level': 'DEBUG', 'level': 'DEBUG',
'propagate': False, 'propagate': False,
}, },
'sql': {
'handlers': ['console', 'sql'],
'level': 'DEBUG',
'propagate': False,
},
}, },
} }