Files
tophux_scrape/modify_db_to_score.py
xiaji 25da264413 第一次提交。
其中爬取是tophub_scraper.py
数据入库是 tophub_add_data_to_db.py
查看当前数据内容是 db_viewer.py
2025-11-09 17:20:44 +08:00

101 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
修改数据库结构脚本
将is_interested字段改为score字段实现10分评分制度
"""
import sqlite3
import os
from loguru import logger
def modify_database_structure():
"""修改数据库结构将is_interested字段改为score字段"""
# 获取当前脚本所在目录的数据库文件路径
script_dir = os.path.dirname(os.path.abspath(__file__))
db_path = os.path.join(script_dir, "tophub_data.db")
# 检查数据库文件是否存在
if not os.path.exists(db_path):
logger.error(f"数据库文件不存在: {db_path}")
return False
try:
# 连接数据库
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# 检查is_interested字段是否存在
cursor.execute("PRAGMA table_info(articles)")
columns = cursor.fetchall()
column_names = [column[1] for column in columns]
if "is_interested" not in column_names:
logger.info("is_interested字段不存在无需修改")
conn.close()
return True
# 检查score字段是否已存在
if "score" in column_names:
logger.info("score字段已存在无需添加")
conn.close()
return True
# 添加score字段默认值为5
logger.info("正在添加score字段...")
cursor.execute("ALTER TABLE articles ADD COLUMN score INTEGER DEFAULT 5")
# 将is_interested的值转换为score
logger.info("正在转换is_interested数据到score字段...")
# 获取所有记录
cursor.execute("SELECT id, is_interested FROM articles")
records = cursor.fetchall()
# 转换数据
for record in records:
article_id, is_interested = record
# 转换逻辑is_interested=1转为score=7is_interested=0转为score=5
score = 7 if is_interested == 1 else 5
cursor.execute("UPDATE articles SET score = ? WHERE id = ?", (score, article_id))
# 提交更改
conn.commit()
logger.info("成功添加score字段并转换数据")
# 验证字段是否添加成功
cursor.execute("PRAGMA table_info(articles)")
columns = cursor.fetchall()
column_names = [column[1] for column in columns]
if "score" in column_names:
logger.info("验证成功score字段已添加到articles表")
else:
logger.error("验证失败score字段未成功添加")
conn.close()
return False
# 检查数据转换结果
cursor.execute("SELECT COUNT(*) FROM articles WHERE score = 7")
count_7 = cursor.fetchone()[0]
cursor.execute("SELECT COUNT(*) FROM articles WHERE score = 5")
count_5 = cursor.fetchone()[0]
logger.info(f"数据转换结果: score=7的记录数: {count_7}, score=5的记录数: {count_5}")
conn.close()
return True
except sqlite3.Error as e:
logger.error(f"数据库操作出错: {str(e)}")
return False
except Exception as e:
logger.error(f"修改数据库结构时出错: {str(e)}")
return False
if __name__ == "__main__":
logger.add("db_modify_score.log", rotation="10 MB", level="INFO")
if modify_database_structure():
logger.info("数据库结构修改完成")
else:
logger.error("数据库结构修改失败")