From d795ce995ce220bb422dcc2f79a553006c1d6273 Mon Sep 17 00:00:00 2001 From: wangweiye7840 Date: Thu, 25 Apr 2024 17:23:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B7=A5=E5=85=B7v4=E7=9A=84?= =?UTF-8?q?dabatase=5Ftools=EF=BC=8C=E4=BD=BF=E5=BE=97=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E5=90=8D=E4=B8=8D=E7=94=A8=E5=85=A8=E5=B1=80=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 工具v4/database_tools_2.py | 68 +++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/工具v4/database_tools_2.py b/工具v4/database_tools_2.py index 1dde7125..8788dfd5 100644 --- a/工具v4/database_tools_2.py +++ b/工具v4/database_tools_2.py @@ -114,8 +114,8 @@ def findsru(id,alist): #在same_list中寻找与id相同的题号 -def findsameinDB(id): #在数据库中寻找与id相同的题号 - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) +def findsameinDB(id,database): #在数据库中寻找与id相同的题号 + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() sql = "SELECT SAME_ID FROM same WHERE ID = (%s);" val = (id,) @@ -126,8 +126,8 @@ def findsameinDB(id): #在数据库中寻找与id相同的题号 set2 = set([ret[0] for ret in mycursor.fetchall()]) return sorted(list(set1 | set2)) -def findrelatedinDB(id): #在数据库中寻找与id关联的题号 - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) +def findrelatedinDB(id,database): #在数据库中寻找与id关联的题号 + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() sql = "SELECT RELATED_ID FROM related WHERE ID = (%s);" val = (id,) @@ -138,8 +138,8 @@ def findrelatedinDB(id): #在数据库中寻找与id关联的题号 set2 = set([ret[0] for ret in mycursor.fetchall()]) return sorted(list(set1 | set2)) -def get_unit_tags(id): - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) +def get_unit_tags(id,database): + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() sql = "SELECT tagname FROM tagcorresp WHERE ID = (%s);" val = (id,) @@ -148,8 +148,8 @@ def get_unit_tags(id): mydb.close() return unittags -def get_problem_content(id): - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) +def get_problem_content(id,database): + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() sql = "SELECT content FROM problems WHERE ID = (%s);" val = (id,) @@ -159,25 +159,25 @@ def get_problem_content(id): return content -def generate_same_list(): - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) +def generate_same_list(database): + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() mycursor.execute("SELECT ID,SAME_ID FROM same;") same_list = [(ret[0],ret[1]) for ret in mycursor.fetchall()] mydb.close() return same_list.copy() -def generate_related_list(): - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) +def generate_related_list(database): + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() mycursor.execute("SELECT ID,RELATED_ID FROM related;") related_list = [(ret[0],ret[1]) for ret in mycursor.fetchall()] mydb.close() return related_list.copy() -def treat_dict(): #对整个题库字典中的内容部分进行预处理,删除无用字符 +def treat_dict(database): #对整个题库字典中的内容部分进行预处理,删除无用字符 treated_dict = {} - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() mycursor.execute("SELECT ID,content FROM problems;") p_dict = {id:content for id,content in mycursor.fetchall()} @@ -367,8 +367,8 @@ def usedIDs(database_name): #返回已使用题号, 已更新为适合mariadb的 mydb.close() return output #返回的是一个多行的字符串, 每一行中含有一个已使用题号的闭区间 -def spareIDs(database_name): #返回空闲题号, 已更新为适合mariadb的版本 - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database_name) +def spareIDs(database): #返回空闲题号, 已更新为适合mariadb的版本 + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() mycursor.execute("SELECT ID FROM problems;") idlist = [ret[0] for ret in mycursor.fetchall()] @@ -382,8 +382,8 @@ def spareIDs(database_name): #返回空闲题号, 已更新为适合mariadb的 return output #返回的是一个多行的字符串, 每一行中含有一个空闲题号的闭区间 -def NextSpareID(num): #返回adict中下一个空闲的题号 - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) +def NextSpareID(num,database): #返回adict中下一个空闲的题号 + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() mycursor.execute("SELECT ID FROM problems;") idlist = [ret[0] for ret in mycursor.fetchall()] @@ -393,8 +393,8 @@ def NextSpareID(num): #返回adict中下一个空闲的题号 mydb.close() return num -def NextSpareIDBlock(num): #返回adict中下一个空闲的题号块 - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) +def NextSpareIDBlock(num,database): #返回adict中下一个空闲的题号块 + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() mycursor.execute("SELECT ID FROM problems;") idlist = [ret[0] for ret in mycursor.fetchall()] @@ -504,8 +504,8 @@ def CreateNewProblem(id,content,origin,dict,editor): # 构建一道新题目的 NewProblem["edit"] = [editor] return NewProblem # 返回一道新题目的字典, 已赋新的ID, 内容, 来源和编辑者 -def AddRelatedProblemToDB(id,content,oid,editor): - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) +def AddRelatedProblemToDB(id,content,oid,editor,database): + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() id = str(id).zfill(6) content = content.strip() @@ -538,8 +538,8 @@ def AddRelatedProblemToDB(id,content,oid,editor): mydb.close() return id -def AddProblemstoDict2024(startingid,raworigin,problems,editor,indexed): #将来自GenerateProblemListFromString的列表中的题目添加到thedict字典, 返回题号列表(包括用老题号替代的题目) - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) +def AddProblemstoDict2024(startingid,raworigin,problems,editor,indexed,database): #将来自GenerateProblemListFromString的列表中的题目添加到thedict字典, 返回题号列表(包括用老题号替代的题目) + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() idlist = [] id = int(startingid) @@ -617,9 +617,9 @@ def CreateIDLinks(old_id_list,new_id_list): #建立已有id和新id之间的联 return id_links # 返回id联系, 每个元组表示一对id, 前者是旧id, 后者是新id -def CreateRelatedProblems(links): # 根据links关联生成待编辑的新题目字典, 等待编辑修改 +def CreateRelatedProblems(links,database): # 根据links关联生成待编辑的新题目字典, 等待编辑修改 output = "\\begin{enumerate}\n" - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() sql = "SELECT content FROM problems WHERE ID = %s;" for id,rid in links: @@ -1284,7 +1284,7 @@ def generate_origin(origin_dict): return data -def MatchConditioninMariaDB(condition_list): +def MatchConditioninMariaDB(condition_list,database): corr_dict = { "content": ('problems','content'), "objs": ('objcorresp','obj_ID'), @@ -1298,7 +1298,7 @@ def MatchConditioninMariaDB(condition_list): "related": ('related','ID','RELATED_ID'), "usages": ('usages','date','classname','diff') } - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() mycursor.execute("SELECT ID FROM problems WHERE NOT content REGEXP 'OBS';") match = set([u[0] for u in mycursor.fetchall()]) @@ -2469,9 +2469,9 @@ def generateAnswerList(string,anspreamble = "答案: \\textcolor{red}{"): #从La return anslist -def unUnitted(idexp): #返回adict中未赋单元的id列表 +def unUnitted(idexp,database): #返回adict中未赋单元的id列表 idlist = generate_number_set(idexp) - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() mycursor.execute("SELECT ID FROM tagcorresp WHERE tagname REGEXP '第\\\\S*单元' or tagname = '暂无对应';") unittedids = set([ret[0] for ret in mycursor.fetchall()]) @@ -2756,10 +2756,10 @@ def RefineExclude(excludejson): #将excludejson的key变为6位题号 return newjson -def ChooseIDsByUsageInterval(startdate,enddate,interval,classregex): #返回根据条件选出的题号字典及对应小题, 需要留意的记录长度不一的题号, 以及所有使用过的题号 +def ChooseIDsByUsageInterval(startdate,enddate,interval,classregex,database): #返回根据条件选出的题号字典及对应小题, 需要留意的记录长度不一的题号, 以及所有使用过的题号 validusages = [] usedproblems = [] - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() sql = "SELECT ID,date,classname,diff FROM usages;" mycursor.execute(sql) @@ -2792,8 +2792,8 @@ def ChooseIDsByUsageInterval(startdate,enddate,interval,classregex): #返回根 return (chosenproblems,cautionids,usedproblems) #返回根据条件选出的题号字典及对应小题, 需要留意的记录长度不一的题号, 以及所有使用过的题号 -def getAllIDsExp(obsincluded = True): #获取题库中所有题目的id(含:,)字符串, 不含 - mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = db_database) +def getAllIDsExp(database,obsincluded = True): #获取题库中所有题目的id(含:,)字符串, 不含 + mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database) mycursor = mydb.cursor() if obsincluded: mycursor.execute("SELECT ID FROM problems;")