You need to sign in or sign up before continuing.
topicDefine.py 2.41 KB
from utils.query import query
from utils.getPublicData import *
from model2.model_use import *

articleList = getAllArticleData()
commentList = getAllCommentsData()

def column_exists(table_name, column_name):
    """检查列是否存在于表中"""
    sql = "SHOW COLUMNS FROM {} LIKE %s".format(table_name)
    params = [column_name]
    result = query(sql, params, type='select')
    return len(result) > 0

def add_label_column(table_name):
    """为表添加label列"""
    if not column_exists(table_name, 'label'):
        sql = f"ALTER TABLE {table_name} ADD COLUMN label TEXT NULL"
        params = []
        query(sql, params)

def drop_label_column(table_name):
    """删除表中的label列"""
    sql = f"ALTER TABLE {table_name} DROP COLUMN label"
    params = []
    query(sql, params)

def topicdefine():
    """根据文章和评论内容进行标注"""
    label_article = []
    label_comments = []
    
    # 为文章添加标签
    for x in articleList:
        label_article.append((x[0], predict_topic(x[5])))
    
    # 为评论添加标签
    for x in commentList:
        label_comments.append((x[5], x[8], predict_topic(x[4])))
    
    return label_article, label_comments

def update_data():
    """更新文章和评论的label列"""
    label_article, label_comments = topicdefine()
    
    # 先为文章和评论添加label列
    add_label_column('article')
    add_label_column('comments')

    try:
        # 使用事务保证批量更新操作的原子性
        # 处理文章的label更新
        for row in label_article:
            id, label = row
            sql = "UPDATE article SET label = %s WHERE id = %s"
            params = [str(label), str(id)]
            query(sql, params)
        
        # 处理评论的label更新
        for row in label_comments:
            id, image, label = row
            sql = "UPDATE comments SET label = %s WHERE authorName=%s AND authorAvatar = %s"
            params = [str(label), str(id), str(image)]
            query(sql, params)
    except Exception as e:
        print(f"更新数据时发生错误: {e}")
        # 如果发生错误,可以选择在此处进行回滚操作(取决于数据库支持的功能)
    finally:
        # 提交事务
        pass

if __name__ == '__main__':
    # 删除label列的操作已经被注释掉,如需删除可取消注释
    # drop_label_column('article')
    # drop_label_column('comments')
    update_data()