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:
return
existing_vid_ids = set()
existing_keys = set()
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()
try:
sel_vid = (
video.select()
.with_only_columns([video.c.v_id])
.where(video.c.v_id.in_(all_v_ids))
.with_only_columns(video.c.v_xid, video.c.rn)
.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:
logger.info(f"[DBSA] 查询 video 表时异常: {e}")
try:
@ -624,11 +625,13 @@ class DBSA:
conn.close()
for i, vid_row in enumerate(vid_rows):
if vid_row["v_id"] in existing_vid_ids:
op_rows[i]["is_repeat"] = 1 # 标记为更新
key = (vid_row["v_xid"], vid_row["rn"])
if key in existing_keys:
op_rows[i]["is_repeat"] = 1
else:
op_rows[i]["is_repeat"] = 2 # 标记为插入
op_rows[i]["is_repeat"] = 2
# 以下作者表、日志表和视频表写入逻辑保持不变...
authors_map = {}
now_ts = int(time.time())
for data in payloads: