fix: 更新视频处理逻辑以使用唯一键对比,优化数据查询
This commit is contained in:
parent
1db2bb0418
commit
3753885781
19
DB.py
19
DB.py
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user