戒酒的李白
Committed by GitHub

Merge pull request #10 from qqqlsm666/main

优化 topicDefine.py 主题标签处理逻辑,提升性能与稳定性
1 from utils.query import query 1 from utils.query import query
2 from utils.getPublicData import * 2 from utils.getPublicData import *
3 from model2.model_use import * 3 from model2.model_use import *
  4 +
4 articleList = getAllArticleData() 5 articleList = getAllArticleData()
5 commentList = getAllCommentsData() 6 commentList = getAllCommentsData()
6 7
7 def column_exists(table_name, column_name): 8 def column_exists(table_name, column_name):
  9 + """检查列是否存在于表中"""
8 sql = "SHOW COLUMNS FROM {} LIKE %s".format(table_name) 10 sql = "SHOW COLUMNS FROM {} LIKE %s".format(table_name)
9 params = [column_name] 11 params = [column_name]
10 result = query(sql, params, type='select') 12 result = query(sql, params, type='select')
11 return len(result) > 0 13 return len(result) > 0
12 -# 添加新的标注列  
13 -def add_label_article(): # 为文章添加标注列  
14 - if not column_exists('article', 'label'):  
15 - sql = "ALTER TABLE article ADD COLUMN label TEXT NULL"  
16 - params = []  
17 - query(sql, params)  
18 14
19 -def add_label_comments(): # 为评论添加标注列  
20 - if not column_exists('comments', 'label'):  
21 - sql = "ALTER TABLE comments ADD COLUMN label TEXT NULL" 15 +def add_label_column(table_name):
  16 + """为表添加label列"""
  17 + if not column_exists(table_name, 'label'):
  18 + sql = f"ALTER TABLE {table_name} ADD COLUMN label TEXT NULL"
22 params = [] 19 params = []
23 query(sql, params) 20 query(sql, params)
24 21
25 -def drop_label():# 删除标注列  
26 - sql = "ALTER TABLE article DROP COLUMN label "  
27 - params = []  
28 - query(sql, params)  
29 -  
30 -def drop_label1():# 删除标注列  
31 - sql = "ALTER TABLE comments DROP COLUMN label " 22 +def drop_label_column(table_name):
  23 + """删除表中的label列"""
  24 + sql = f"ALTER TABLE {table_name} DROP COLUMN label"
32 params = [] 25 params = []
33 query(sql, params) 26 query(sql, params)
34 27
35 -# 处理数据并添加标注  
36 def topicdefine(): 28 def topicdefine():
37 - label_article=[]  
38 - label_comments=[] 29 + """根据文章和评论内容进行标注"""
  30 + label_article = []
  31 + label_comments = []
  32 +
  33 + # 为文章添加标签
39 for x in articleList: 34 for x in articleList:
40 - label_article.append((x[0],predict_topic(x[5]))) 35 + label_article.append((x[0], predict_topic(x[5])))
  36 +
  37 + # 为评论添加标签
41 for x in commentList: 38 for x in commentList:
42 - label_comments.append((x[5],x[8],predict_topic(x[4])))  
43 - return label_article,label_comments 39 + label_comments.append((x[5], x[8], predict_topic(x[4])))
  40 +
  41 + return label_article, label_comments
44 42
45 -# 更新数据库  
46 def update_data(): 43 def update_data():
47 - label_article,label_comments=topicdefine()  
48 - add_label_comments()  
49 - add_label_article()  
50 - for row in label_article:  
51 - id, label = row  
52 - sql = "UPDATE article SET label = %s WHERE id = %s"  
53 - params = [str(label),str(id)]  
54 - query(sql, params)  
55 - for row in label_comments:  
56 - id,image,label = row  
57 - sql = "UPDATE comments SET label = %s WHERE authorName=%s AND authorAvatar = %s"  
58 - params = [str(label),str(id),str(image)]  
59 - query(sql, params) 44 + """更新文章和评论的label列"""
  45 + label_article, label_comments = topicdefine()
  46 +
  47 + # 先为文章和评论添加label列
  48 + add_label_column('article')
  49 + add_label_column('comments')
60 50
  51 + try:
  52 + # 使用事务保证批量更新操作的原子性
  53 + # 处理文章的label更新
  54 + for row in label_article:
  55 + id, label = row
  56 + sql = "UPDATE article SET label = %s WHERE id = %s"
  57 + params = [str(label), str(id)]
  58 + query(sql, params)
  59 +
  60 + # 处理评论的label更新
  61 + for row in label_comments:
  62 + id, image, label = row
  63 + sql = "UPDATE comments SET label = %s WHERE authorName=%s AND authorAvatar = %s"
  64 + params = [str(label), str(id), str(image)]
  65 + query(sql, params)
  66 + except Exception as e:
  67 + print(f"更新数据时发生错误: {e}")
  68 + # 如果发生错误,可以选择在此处进行回滚操作(取决于数据库支持的功能)
  69 + finally:
  70 + # 提交事务
  71 + pass
61 72
62 if __name__ == '__main__': 73 if __name__ == '__main__':
63 - # drop_label()  
64 - # drop_label1() 74 + # 删除label列的操作已经被注释掉,如需删除可取消注释
  75 + # drop_label_column('article')
  76 + # drop_label_column('comments')
65 update_data() 77 update_data()
66 -#删除文章和评论的标签列