fix: 更新视频处理逻辑以使用唯一键对比,优化数据查询

This commit is contained in:
晓丰 2025-06-01 18:48:16 +08:00
parent 1db2bb0418
commit 3753885781

19
DB.py
View File

@ -602,17 +602,18 @@ class DBSA:
if not op_rows and not vid_rows: if not op_rows and not vid_rows:
return return
existing_vid_ids = set() existing_keys = set()
if vid_rows: if vid_rows:
all_v_ids = list({row["v_id"] for row in vid_rows}) # 收集 (v_xid, rn) 对,应与 video 表中的唯一索引匹配
all_keys = list({(row["v_xid"], row["rn"]) for row in vid_rows})
conn = _engine.connect() conn = _engine.connect()
try: try:
sel_vid = ( sel_vid = (
video.select() video.select()
.with_only_columns([video.c.v_id]) .with_only_columns(video.c.v_xid, video.c.rn)
.where(video.c.v_id.in_(all_v_ids)) .where(tuple_(video.c.v_xid, video.c.rn).in_(all_keys))
) )
existing_vid_ids = {row.v_id for row in conn.execute(sel_vid).fetchall()} existing_keys = {(row.v_xid, row.rn) for row in conn.execute(sel_vid).fetchall()}
except Exception as e: except Exception as e:
logger.info(f"[DBSA] 查询 video 表时异常: {e}") logger.info(f"[DBSA] 查询 video 表时异常: {e}")
try: try:
@ -624,11 +625,13 @@ class DBSA:
conn.close() conn.close()
for i, vid_row in enumerate(vid_rows): for i, vid_row in enumerate(vid_rows):
if vid_row["v_id"] in existing_vid_ids: key = (vid_row["v_xid"], vid_row["rn"])
op_rows[i]["is_repeat"] = 1 # 标记为更新 if key in existing_keys:
op_rows[i]["is_repeat"] = 1
else: else:
op_rows[i]["is_repeat"] = 2 # 标记为插入 op_rows[i]["is_repeat"] = 2
# 以下作者表、日志表和视频表写入逻辑保持不变...
authors_map = {} authors_map = {}
now_ts = int(time.time()) now_ts = int(time.time())
for data in payloads: for data in payloads: