modify scripts
This commit is contained in:
@ -281,7 +281,7 @@ class JavbusDBHandler(DatabaseHandler):
|
||||
|
||||
def query_actors(self, **filters):
|
||||
try:
|
||||
sql = f"SELECT href, en_name as name, uncensored FROM {self.tbl_name_actors} WHERE 1=1"
|
||||
sql = f"SELECT href, en_name as name, uncensored, movies_cnt FROM {self.tbl_name_actors} WHERE 1=1"
|
||||
params = []
|
||||
|
||||
conditions = {
|
||||
@ -319,7 +319,7 @@ class JavbusDBHandler(DatabaseHandler):
|
||||
params.append(filters["limit"])
|
||||
|
||||
self.cursor.execute(sql, params)
|
||||
return [{'href': row[0], 'name': row[1], 'uncensored': row[2]} for row in self.cursor.fetchall()]
|
||||
return [{'href': row[0], 'name': row[1], 'uncensored': row[2], 'movies_cnt':row[3]} for row in self.cursor.fetchall()]
|
||||
except sqlite3.Error as e:
|
||||
logging.error(f"查询 href 失败: {e}")
|
||||
return None
|
||||
@ -694,3 +694,55 @@ class JavbusDBHandler(DatabaseHandler):
|
||||
self.conn.rollback()
|
||||
logging.error("Error inserting movie: %s", e)
|
||||
logging.error(f"query error: {e}")
|
||||
|
||||
# 处理影片的 无码 字段
|
||||
def reset_actor_movies(self, check_and_do = 0):
|
||||
try:
|
||||
# 检查表中是否已存在movies_cnt列
|
||||
self.cursor.execute(f"PRAGMA table_info({self.tbl_name_actors});")
|
||||
columns = [row[1] for row in self.cursor.fetchall()]
|
||||
|
||||
if 'movies_cnt' not in columns:
|
||||
# 列不存在,添加新列
|
||||
add_field_sql = f"""
|
||||
ALTER TABLE {self.tbl_name_actors} ADD COLUMN movies_cnt INTEGER DEFAULT 0 NOT NULL;
|
||||
"""
|
||||
self.cursor.execute(add_field_sql)
|
||||
logging.info("成功添加movies_cnt字段")
|
||||
else:
|
||||
logging.info("movies_cnt字段已存在,跳过添加")
|
||||
|
||||
# 确保关联表有索引
|
||||
self.cursor.execute(f"""
|
||||
CREATE INDEX IF NOT EXISTS idx_actor_movie_actor_id
|
||||
ON {self.tbl_name_actor_movie}(actor_id);
|
||||
""")
|
||||
|
||||
# 创建临时表存储统计结果
|
||||
self.cursor.execute(f"""
|
||||
CREATE TEMPORARY TABLE temp_actor_counts AS
|
||||
SELECT actor_id, COUNT(movie_id) AS cnt
|
||||
FROM {self.tbl_name_actor_movie}
|
||||
GROUP BY actor_id;
|
||||
""")
|
||||
|
||||
# 为临时表添加索引
|
||||
self.cursor.execute("CREATE INDEX idx_temp_actor_id ON temp_actor_counts(actor_id);")
|
||||
|
||||
# 更新主表
|
||||
self.cursor.execute(f"""
|
||||
UPDATE {self.tbl_name_actors}
|
||||
SET movies_cnt = COALESCE((
|
||||
SELECT cnt FROM temp_actor_counts
|
||||
WHERE actor_id = {self.tbl_name_actors}.id
|
||||
), 0); -- 使用COALESCE处理没有影片的演员
|
||||
""")
|
||||
updated_rows = self.cursor.rowcount
|
||||
logging.info(f"成功更新{updated_rows}个演员的影片数量")
|
||||
|
||||
self.conn.commit()
|
||||
logging.info("任务执行完成!")
|
||||
|
||||
except sqlite3.Error as e:
|
||||
self.conn.rollback()
|
||||
logging.error("Error updating actor movie_cnt: %s", e)
|
||||
|
||||
Reference in New Issue
Block a user