修改工具v4的dabatase_tools,使得数据库名不用全局变量设置
This commit is contained in:
parent
12ffd17e28
commit
d795ce995c
|
|
@ -114,8 +114,8 @@ def findsru(id,alist): #在same_list中寻找与id相同的题号
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def findsameinDB(id): #在数据库中寻找与id相同的题号
|
def findsameinDB(id,database): #在数据库中寻找与id相同的题号
|
||||||
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 = mydb.cursor()
|
||||||
sql = "SELECT SAME_ID FROM same WHERE ID = (%s);"
|
sql = "SELECT SAME_ID FROM same WHERE ID = (%s);"
|
||||||
val = (id,)
|
val = (id,)
|
||||||
|
|
@ -126,8 +126,8 @@ def findsameinDB(id): #在数据库中寻找与id相同的题号
|
||||||
set2 = set([ret[0] for ret in mycursor.fetchall()])
|
set2 = set([ret[0] for ret in mycursor.fetchall()])
|
||||||
return sorted(list(set1 | set2))
|
return sorted(list(set1 | set2))
|
||||||
|
|
||||||
def findrelatedinDB(id): #在数据库中寻找与id关联的题号
|
def findrelatedinDB(id,database): #在数据库中寻找与id关联的题号
|
||||||
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 = mydb.cursor()
|
||||||
sql = "SELECT RELATED_ID FROM related WHERE ID = (%s);"
|
sql = "SELECT RELATED_ID FROM related WHERE ID = (%s);"
|
||||||
val = (id,)
|
val = (id,)
|
||||||
|
|
@ -138,8 +138,8 @@ def findrelatedinDB(id): #在数据库中寻找与id关联的题号
|
||||||
set2 = set([ret[0] for ret in mycursor.fetchall()])
|
set2 = set([ret[0] for ret in mycursor.fetchall()])
|
||||||
return sorted(list(set1 | set2))
|
return sorted(list(set1 | set2))
|
||||||
|
|
||||||
def get_unit_tags(id):
|
def get_unit_tags(id,database):
|
||||||
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 = mydb.cursor()
|
||||||
sql = "SELECT tagname FROM tagcorresp WHERE ID = (%s);"
|
sql = "SELECT tagname FROM tagcorresp WHERE ID = (%s);"
|
||||||
val = (id,)
|
val = (id,)
|
||||||
|
|
@ -148,8 +148,8 @@ def get_unit_tags(id):
|
||||||
mydb.close()
|
mydb.close()
|
||||||
return unittags
|
return unittags
|
||||||
|
|
||||||
def get_problem_content(id):
|
def get_problem_content(id,database):
|
||||||
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 = mydb.cursor()
|
||||||
sql = "SELECT content FROM problems WHERE ID = (%s);"
|
sql = "SELECT content FROM problems WHERE ID = (%s);"
|
||||||
val = (id,)
|
val = (id,)
|
||||||
|
|
@ -159,25 +159,25 @@ def get_problem_content(id):
|
||||||
return content
|
return content
|
||||||
|
|
||||||
|
|
||||||
def generate_same_list():
|
def generate_same_list(database):
|
||||||
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 = mydb.cursor()
|
||||||
mycursor.execute("SELECT ID,SAME_ID FROM same;")
|
mycursor.execute("SELECT ID,SAME_ID FROM same;")
|
||||||
same_list = [(ret[0],ret[1]) for ret in mycursor.fetchall()]
|
same_list = [(ret[0],ret[1]) for ret in mycursor.fetchall()]
|
||||||
mydb.close()
|
mydb.close()
|
||||||
return same_list.copy()
|
return same_list.copy()
|
||||||
|
|
||||||
def generate_related_list():
|
def generate_related_list(database):
|
||||||
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 = mydb.cursor()
|
||||||
mycursor.execute("SELECT ID,RELATED_ID FROM related;")
|
mycursor.execute("SELECT ID,RELATED_ID FROM related;")
|
||||||
related_list = [(ret[0],ret[1]) for ret in mycursor.fetchall()]
|
related_list = [(ret[0],ret[1]) for ret in mycursor.fetchall()]
|
||||||
mydb.close()
|
mydb.close()
|
||||||
return related_list.copy()
|
return related_list.copy()
|
||||||
|
|
||||||
def treat_dict(): #对整个题库字典中的内容部分进行预处理,删除无用字符
|
def treat_dict(database): #对整个题库字典中的内容部分进行预处理,删除无用字符
|
||||||
treated_dict = {}
|
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 = mydb.cursor()
|
||||||
mycursor.execute("SELECT ID,content FROM problems;")
|
mycursor.execute("SELECT ID,content FROM problems;")
|
||||||
p_dict = {id:content for id,content in mycursor.fetchall()}
|
p_dict = {id:content for id,content in mycursor.fetchall()}
|
||||||
|
|
@ -367,8 +367,8 @@ def usedIDs(database_name): #返回已使用题号, 已更新为适合mariadb的
|
||||||
mydb.close()
|
mydb.close()
|
||||||
return output #返回的是一个多行的字符串, 每一行中含有一个已使用题号的闭区间
|
return output #返回的是一个多行的字符串, 每一行中含有一个已使用题号的闭区间
|
||||||
|
|
||||||
def spareIDs(database_name): #返回空闲题号, 已更新为适合mariadb的版本
|
def spareIDs(database): #返回空闲题号, 已更新为适合mariadb的版本
|
||||||
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database_name)
|
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database)
|
||||||
mycursor = mydb.cursor()
|
mycursor = mydb.cursor()
|
||||||
mycursor.execute("SELECT ID FROM problems;")
|
mycursor.execute("SELECT ID FROM problems;")
|
||||||
idlist = [ret[0] for ret in mycursor.fetchall()]
|
idlist = [ret[0] for ret in mycursor.fetchall()]
|
||||||
|
|
@ -382,8 +382,8 @@ def spareIDs(database_name): #返回空闲题号, 已更新为适合mariadb的
|
||||||
return output #返回的是一个多行的字符串, 每一行中含有一个空闲题号的闭区间
|
return output #返回的是一个多行的字符串, 每一行中含有一个空闲题号的闭区间
|
||||||
|
|
||||||
|
|
||||||
def NextSpareID(num): #返回adict中下一个空闲的题号
|
def NextSpareID(num,database): #返回adict中下一个空闲的题号
|
||||||
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 = mydb.cursor()
|
||||||
mycursor.execute("SELECT ID FROM problems;")
|
mycursor.execute("SELECT ID FROM problems;")
|
||||||
idlist = [ret[0] for ret in mycursor.fetchall()]
|
idlist = [ret[0] for ret in mycursor.fetchall()]
|
||||||
|
|
@ -393,8 +393,8 @@ def NextSpareID(num): #返回adict中下一个空闲的题号
|
||||||
mydb.close()
|
mydb.close()
|
||||||
return num
|
return num
|
||||||
|
|
||||||
def NextSpareIDBlock(num): #返回adict中下一个空闲的题号块
|
def NextSpareIDBlock(num,database): #返回adict中下一个空闲的题号块
|
||||||
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 = mydb.cursor()
|
||||||
mycursor.execute("SELECT ID FROM problems;")
|
mycursor.execute("SELECT ID FROM problems;")
|
||||||
idlist = [ret[0] for ret in mycursor.fetchall()]
|
idlist = [ret[0] for ret in mycursor.fetchall()]
|
||||||
|
|
@ -504,8 +504,8 @@ def CreateNewProblem(id,content,origin,dict,editor): # 构建一道新题目的
|
||||||
NewProblem["edit"] = [editor]
|
NewProblem["edit"] = [editor]
|
||||||
return NewProblem # 返回一道新题目的字典, 已赋新的ID, 内容, 来源和编辑者
|
return NewProblem # 返回一道新题目的字典, 已赋新的ID, 内容, 来源和编辑者
|
||||||
|
|
||||||
def AddRelatedProblemToDB(id,content,oid,editor):
|
def AddRelatedProblemToDB(id,content,oid,editor,database):
|
||||||
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 = mydb.cursor()
|
||||||
id = str(id).zfill(6)
|
id = str(id).zfill(6)
|
||||||
content = content.strip()
|
content = content.strip()
|
||||||
|
|
@ -538,8 +538,8 @@ def AddRelatedProblemToDB(id,content,oid,editor):
|
||||||
mydb.close()
|
mydb.close()
|
||||||
return id
|
return id
|
||||||
|
|
||||||
def AddProblemstoDict2024(startingid,raworigin,problems,editor,indexed): #将来自GenerateProblemListFromString的列表中的题目添加到thedict字典, 返回题号列表(包括用老题号替代的题目)
|
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 = db_database)
|
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = database)
|
||||||
mycursor = mydb.cursor()
|
mycursor = mydb.cursor()
|
||||||
idlist = []
|
idlist = []
|
||||||
id = int(startingid)
|
id = int(startingid)
|
||||||
|
|
@ -617,9 +617,9 @@ def CreateIDLinks(old_id_list,new_id_list): #建立已有id和新id之间的联
|
||||||
return id_links # 返回id联系, 每个元组表示一对id, 前者是旧id, 后者是新id
|
return id_links # 返回id联系, 每个元组表示一对id, 前者是旧id, 后者是新id
|
||||||
|
|
||||||
|
|
||||||
def CreateRelatedProblems(links): # 根据links关联生成待编辑的新题目字典, 等待编辑修改
|
def CreateRelatedProblems(links,database): # 根据links关联生成待编辑的新题目字典, 等待编辑修改
|
||||||
output = "\\begin{enumerate}\n"
|
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()
|
mycursor = mydb.cursor()
|
||||||
sql = "SELECT content FROM problems WHERE ID = %s;"
|
sql = "SELECT content FROM problems WHERE ID = %s;"
|
||||||
for id,rid in links:
|
for id,rid in links:
|
||||||
|
|
@ -1284,7 +1284,7 @@ def generate_origin(origin_dict):
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def MatchConditioninMariaDB(condition_list):
|
def MatchConditioninMariaDB(condition_list,database):
|
||||||
corr_dict = {
|
corr_dict = {
|
||||||
"content": ('problems','content'),
|
"content": ('problems','content'),
|
||||||
"objs": ('objcorresp','obj_ID'),
|
"objs": ('objcorresp','obj_ID'),
|
||||||
|
|
@ -1298,7 +1298,7 @@ def MatchConditioninMariaDB(condition_list):
|
||||||
"related": ('related','ID','RELATED_ID'),
|
"related": ('related','ID','RELATED_ID'),
|
||||||
"usages": ('usages','date','classname','diff')
|
"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 = mydb.cursor()
|
||||||
mycursor.execute("SELECT ID FROM problems WHERE NOT content REGEXP 'OBS';")
|
mycursor.execute("SELECT ID FROM problems WHERE NOT content REGEXP 'OBS';")
|
||||||
match = set([u[0] for u in mycursor.fetchall()])
|
match = set([u[0] for u in mycursor.fetchall()])
|
||||||
|
|
@ -2469,9 +2469,9 @@ def generateAnswerList(string,anspreamble = "答案: \\textcolor{red}{"): #从La
|
||||||
return anslist
|
return anslist
|
||||||
|
|
||||||
|
|
||||||
def unUnitted(idexp): #返回adict中未赋单元的id列表
|
def unUnitted(idexp,database): #返回adict中未赋单元的id列表
|
||||||
idlist = generate_number_set(idexp)
|
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 = mydb.cursor()
|
||||||
mycursor.execute("SELECT ID FROM tagcorresp WHERE tagname REGEXP '第\\\\S*单元' or tagname = '暂无对应';")
|
mycursor.execute("SELECT ID FROM tagcorresp WHERE tagname REGEXP '第\\\\S*单元' or tagname = '暂无对应';")
|
||||||
unittedids = set([ret[0] for ret in mycursor.fetchall()])
|
unittedids = set([ret[0] for ret in mycursor.fetchall()])
|
||||||
|
|
@ -2756,10 +2756,10 @@ def RefineExclude(excludejson): #将excludejson的key变为6位题号
|
||||||
return newjson
|
return newjson
|
||||||
|
|
||||||
|
|
||||||
def ChooseIDsByUsageInterval(startdate,enddate,interval,classregex): #返回根据条件选出的题号字典及对应小题, 需要留意的记录长度不一的题号, 以及所有使用过的题号
|
def ChooseIDsByUsageInterval(startdate,enddate,interval,classregex,database): #返回根据条件选出的题号字典及对应小题, 需要留意的记录长度不一的题号, 以及所有使用过的题号
|
||||||
validusages = []
|
validusages = []
|
||||||
usedproblems = []
|
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()
|
mycursor = mydb.cursor()
|
||||||
sql = "SELECT ID,date,classname,diff FROM usages;"
|
sql = "SELECT ID,date,classname,diff FROM usages;"
|
||||||
mycursor.execute(sql)
|
mycursor.execute(sql)
|
||||||
|
|
@ -2792,8 +2792,8 @@ def ChooseIDsByUsageInterval(startdate,enddate,interval,classregex): #返回根
|
||||||
return (chosenproblems,cautionids,usedproblems) #返回根据条件选出的题号字典及对应小题, 需要留意的记录长度不一的题号, 以及所有使用过的题号
|
return (chosenproblems,cautionids,usedproblems) #返回根据条件选出的题号字典及对应小题, 需要留意的记录长度不一的题号, 以及所有使用过的题号
|
||||||
|
|
||||||
|
|
||||||
def getAllIDsExp(obsincluded = True): #获取题库中所有题目的id(含:,)字符串, 不含
|
def getAllIDsExp(database,obsincluded = True): #获取题库中所有题目的id(含:,)字符串, 不含
|
||||||
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 = mydb.cursor()
|
||||||
if obsincluded:
|
if obsincluded:
|
||||||
mycursor.execute("SELECT ID FROM problems;")
|
mycursor.execute("SELECT ID FROM problems;")
|
||||||
|
|
|
||||||
Reference in New Issue