fix: 优化视频数据插入逻辑,使用 ON DUPLICATE KEY 更新现有记录以提高性能
This commit is contained in:
parent
16c71d5b5b
commit
62184e8ad8
66
DB.py
66
DB.py
@ -229,21 +229,6 @@ class DBVidcon:
|
|||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
# 1) 先读 is_repeat
|
|
||||||
select_repeat = """
|
|
||||||
SELECT is_repeat,watch_number,follow_number,video_number
|
|
||||||
FROM sh_dm_video_v2
|
|
||||||
WHERE rn = %(rn)s
|
|
||||||
AND v_xid = %(v_xid)s
|
|
||||||
LIMIT 1
|
|
||||||
"""
|
|
||||||
self.cursor.execute(select_repeat, data)
|
|
||||||
row = self.cursor.fetchone()
|
|
||||||
if row:
|
|
||||||
data['is_repeat'] = row.get('is_repeat', 3)
|
|
||||||
data['fans'] = row.get('follow_number', 0)
|
|
||||||
data['videos'] = row.get('video_number', 0)
|
|
||||||
# 2) 插入到 op 表
|
|
||||||
sql_op = """
|
sql_op = """
|
||||||
INSERT INTO sh_dm_video_op_v2 (
|
INSERT INTO sh_dm_video_op_v2 (
|
||||||
v_id, v_xid, a_id, level, name_title,
|
v_id, v_xid, a_id, level, name_title,
|
||||||
@ -256,36 +241,29 @@ class DBVidcon:
|
|||||||
)
|
)
|
||||||
"""
|
"""
|
||||||
self.cursor.execute(sql_op, data)
|
self.cursor.execute(sql_op, data)
|
||||||
|
sql_update = """
|
||||||
|
INSERT INTO sh_dm_video_v2 (
|
||||||
|
v_id, v_xid, rn, v_name, title, link,
|
||||||
|
edition, duration,
|
||||||
|
public_time, cover_pic, sort,
|
||||||
|
u_xid, u_id, u_pic, u_name,
|
||||||
|
status, createtime, updatetime
|
||||||
|
) VALUES (
|
||||||
|
%(v_id)s, %(v_xid)s, %(rn)s, %(v_name)s, %(title)s, %(link)s,
|
||||||
|
'', %(duration)s,
|
||||||
|
%(create_time)s, %(cover_pic)s, %(sort)s,
|
||||||
|
%(u_xid)s, %(u_id)s, %(u_pic)s, %(u_name)s,
|
||||||
|
1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
|
||||||
|
)
|
||||||
|
ON DUPLICATE KEY UPDATE
|
||||||
|
title = VALUES(title),
|
||||||
|
duration = VALUES(duration),
|
||||||
|
cover_pic = VALUES(cover_pic),
|
||||||
|
sort = VALUES(sort),
|
||||||
|
updatetime = UNIX_TIMESTAMP();
|
||||||
|
"""
|
||||||
|
|
||||||
# 3) 删除旧表行
|
self.cursor.execute(sql_update, data)
|
||||||
sql_del = """
|
|
||||||
DELETE FROM sh_dm_video_v2
|
|
||||||
WHERE rn = %(rn)s
|
|
||||||
AND v_xid = %(v_xid)s
|
|
||||||
"""
|
|
||||||
self.cursor.execute(sql_del, data)
|
|
||||||
|
|
||||||
# 4) 插入新表
|
|
||||||
sql_ins = """
|
|
||||||
INSERT INTO sh_dm_video_v2 (
|
|
||||||
v_id, v_xid, rn, v_name, title, link,
|
|
||||||
is_piracy, edition, duration,
|
|
||||||
watch_number, follow_number, video_number,
|
|
||||||
public_time, cover_pic, sort,
|
|
||||||
u_xid, u_id, u_pic, u_name,
|
|
||||||
status, createtime, updatetime,
|
|
||||||
is_repeat
|
|
||||||
) VALUES (
|
|
||||||
%(v_id)s, %(v_xid)s, %(rn)s, %(v_name)s, %(title)s, %(link)s,
|
|
||||||
%(is_piracy)s, '', %(duration)s,
|
|
||||||
%(watch_number)s, %(fans)s, %(videos)s,
|
|
||||||
%(create_time)s, %(cover_pic)s, %(sort)s,
|
|
||||||
%(u_xid)s, %(u_id)s, %(u_pic)s, %(u_name)s,
|
|
||||||
1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(),
|
|
||||||
%(is_repeat)s
|
|
||||||
)
|
|
||||||
"""
|
|
||||||
self.cursor.execute(sql_ins, data)
|
|
||||||
break # 成功跳出重试循环
|
break # 成功跳出重试循环
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user