修改题库工具为适配含有obsolete列的数据库

This commit is contained in:
weiye.wang 2024-06-15 20:48:23 +08:00
parent 58d304166c
commit 40306c2864
14 changed files with 123 additions and 101 deletions

View File

@ -117,11 +117,11 @@ def findsru(id,alist): #在same_list中寻找与id相同的题号
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);"
sql = "SELECT SAME_ID FROM same WHERE ID = (%s) AND NOT obsolete;"
val = (id,)
mycursor.execute(sql,val)
set1 = set([ret[0] for ret in mycursor.fetchall()])
sql = "SELECT ID FROM same WHERE SAME_ID = (%s);"
sql = "SELECT ID FROM same WHERE SAME_ID = (%s) AND NOT obsolete;"
mycursor.execute(sql,val)
set2 = set([ret[0] for ret in mycursor.fetchall()])
return sorted(list(set1 | set2))
@ -129,11 +129,11 @@ def findsameinDB(id,database): #在数据库中寻找与id相同的题号
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);"
sql = "SELECT RELATED_ID FROM related WHERE ID = (%s) AND NOT obsolete;"
val = (id,)
mycursor.execute(sql,val)
set1 = set([ret[0] for ret in mycursor.fetchall()])
sql = "SELECT ID FROM related WHERE RELATED_ID = (%s);"
sql = "SELECT ID FROM related WHERE RELATED_ID = (%s) AND NOT obsolete;"
mycursor.execute(sql,val)
set2 = set([ret[0] for ret in mycursor.fetchall()])
return sorted(list(set1 | set2))
@ -141,7 +141,7 @@ def findrelatedinDB(id,database): #在数据库中寻找与id关联的题号
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);"
sql = "SELECT tagname FROM tagcorresp WHERE ID = (%s) AND NOT obsolete;"
val = (id,)
mycursor.execute(sql,val)
unittags = [ret[0] for ret in mycursor.fetchall() if "单元" in ret[0]]
@ -151,10 +151,14 @@ def get_unit_tags(id,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);"
sql = "SELECT content FROM problems WHERE ID = (%s) AND NOT obsolete;"
val = (id,)
mycursor.execute(sql,val)
content = mycursor.fetchall()[0][0]
ret = mycursor.fetchall()
if len(ret) == 0:
return "题目已作废"
else:
content = ret[0][0]
mydb.close()
return content
@ -162,7 +166,7 @@ def get_problem_content(id,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;")
mycursor.execute("SELECT ID,SAME_ID FROM same WHERE NOT obsolete;")
same_list = [(ret[0],ret[1]) for ret in mycursor.fetchall()]
mydb.close()
return same_list.copy()
@ -170,7 +174,7 @@ def generate_same_list(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;")
mycursor.execute("SELECT ID,RELATED_ID FROM related WHERE NOT obsolete;")
related_list = [(ret[0],ret[1]) for ret in mycursor.fetchall()]
mydb.close()
return related_list.copy()
@ -179,7 +183,7 @@ def treat_dict(database): #对整个题库字典中的内容部分进行预处
treated_dict = {}
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;")
mycursor.execute("SELECT ID,content FROM problems WHERE NOT obsolete;")
p_dict = {id:content for id,content in mycursor.fetchall()}
# mycursor.execute("SELECT ID,SAME_ID FROM same;")
# same_list = [(ret[0],ret[1]) for ret in mycursor.fetchall()]
@ -363,6 +367,9 @@ def usedIDs(database_name): #返回已使用题号, 已更新为适合mariadb的
start = interval[0]
end = interval[-1]
output += "首个已使用id: %s, 直至: %s"%(str(start).zfill(6),str(end).zfill(6)) + "\n"
mycursor.execute("SELECT ID FROM problems WHERE obsolete;")
idlist = [ret[0] for ret in mycursor.fetchall()]
output += f"\n已作废题号: {generate_exp(idlist)}"
output = output.strip()
mydb.close()
return output #返回的是一个多行的字符串, 每一行中含有一个已使用题号的闭区间
@ -686,7 +693,7 @@ def CreateRelatedProblems(links,database): # 根据links关联生成待编辑的
output = "\\begin{enumerate}\n"
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;"
sql = "SELECT content FROM problems WHERE ID = %s AND NOT obsolete;"
for id,rid in links:
val = (id,)
mycursor.execute(sql,val)
@ -926,7 +933,7 @@ def AppendUsageData2024(prodict,field_id_and_content):
def generateUsageList(db,id):
mycursor = db.cursor()
mycursor.execute("SELECT date,classname,diff FROM usages WHERE ID = %s;",(id,))
mycursor.execute("SELECT date,classname,diff FROM usages WHERE ID = %s AND NOT obsolete;",(id,))
tuplelist = mycursor.fetchall()
return tuplelist
@ -951,9 +958,9 @@ def ImportMetadata(db,metadatafilepath): #metadata自动修改, 根据字段自
startdate = GetDate()
starttime = GetTime()
pendingusagelist = []
mycursor.execute("SELECT ID FROM problems;")
mycursor.execute("SELECT ID FROM problems WHERE NOT obsolete;")
id_list_in_DB = [ret[0] for ret in mycursor.fetchall()]
mycursor.execute("SELECT objid FROM lessonobj;")
mycursor.execute("SELECT objid FROM lessonobj WHERE NOT obsolete;")
obj_list_in_DB = [ret[0] for ret in mycursor.fetchall()]
data_to_modify = ObtainDatatoModify(metadatafilepath,fieldsdict,id_list_in_DB)
print(data_to_modify)
@ -997,7 +1004,7 @@ def ImportMetadata(db,metadatafilepath): #metadata自动修改, 根据字段自
def overwriteinDB(mydb,field,id,content_string): #覆盖ans,solution,space字段的内容并在logs中记录
mycursor = mydb.cursor()
sql = f"SELECT {field} FROM problems WHERE ID = %s;"
sql = f"SELECT {field} FROM problems WHERE ID = %s AND NOT obsolete;"
val = (id,)
mycursor.execute(sql,val)
original_string = mycursor.fetchall()[0][0]
@ -1015,7 +1022,7 @@ def mutualappendinDB(mydb,field,id,content_string,idlist): #新增same,related,u
smallid = min(id,id2)
bigid = max(id,id2)
if smallid in idlist and bigid in idlist:
sql = f"SELECT ID, {field.upper()}_ID from {field} WHERE ID = %s AND {field.upper()}_ID = %s;"
sql = f"SELECT ID, {field.upper()}_ID from {field} WHERE ID = %s AND {field.upper()}_ID = %s AND NOT obsolete;"
val = (smallid,bigid)
mycursor.execute(sql,val)
ret_list = mycursor.fetchall()
@ -1036,7 +1043,7 @@ def objappendinDB(mydb,id,content_string,objlist): #新增obj对应
if not objid in objlist:
print(f"{objid} 有误, 请检查!!!")
else:
sql = f"SELECT ID, obj_ID FROM objcorresp WHERE ID = %s AND obj_ID = %s;"
sql = f"SELECT ID, obj_ID FROM objcorresp WHERE ID = %s AND obj_ID = %s AND NOT obsolete;"
val = (id,objid)
mycursor.execute(sql,val)
ret_list = mycursor.fetchall()
@ -1053,7 +1060,7 @@ def tagappendinDB(mydb,id,content_string): #新增tag对应
mycursor = mydb.cursor()
content_list = [item.strip() for item in content_string.split("\n") if not item.strip() == ""]
for tag in content_list:
sql = f"SELECT ID, tagname FROM tagcorresp WHERE ID = %s AND tagname = %s;"
sql = f"SELECT ID, tagname FROM tagcorresp WHERE ID = %s AND tagname = %s AND NOT obsolete;"
val = (id,tag)
mycursor.execute(sql,val)
ret_list = mycursor.fetchall()
@ -1069,7 +1076,7 @@ def remarkappendinDB(mydb,id,content_string): #新增备注
content_list = [item.strip() for item in content_string.split("\n") if not item.strip() == ""]
for line in content_list:
date,remark = parseRemark(line)
sql = f"SELECT ID,date,remark_content FROM remarks WHERE ID = %s AND date = %s AND remark_content LIKE %s;"
sql = f"SELECT ID,date,remark_content FROM remarks WHERE ID = %s AND date = %s AND remark_content LIKE %s AND NOT obsolete;"
val = (id,date,"%"+remark+"%")
mycursor.execute(sql,val)
ret_list = mycursor.fetchall()
@ -1114,7 +1121,7 @@ def usageappendinDB(mydb,id,content_string): #新增使用记录
date = rec["date"]
classname = rec["classid"]
diff = rec["difficulties"]
sql = f"SELECT ID,date,classname,diff FROM usages WHERE ID = %s and classname = %s;"
sql = f"SELECT ID,date,classname,diff FROM usages WHERE ID = %s and classname = %s AND NOT obsolete;"
val = (id,classname)
mycursor.execute(sql,val)
oldusage_list = mycursor.fetchall()
@ -1277,7 +1284,7 @@ def GetSamePairs(prodict): #获取已标注的相同题目组
def ShareSameUsagesinDB(id1,id2,db): #有问题, 待修改
mycursor = db.cursor()
sql = "SELECT date,classname,diff FROM usages WHERE ID = (%s);"
sql = "SELECT date,classname,diff FROM usages WHERE ID = (%s) AND NOT obsolete;"
val = (id1,)
mycursor.execute(sql,val)
id1_usages_list = mycursor.fetchall()
@ -1365,27 +1372,27 @@ def MatchConditioninMariaDB(condition_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 FROM problems WHERE NOT content REGEXP 'OBS';")
mycursor.execute("SELECT ID FROM problems WHERE NOT obsolete;")
match = set([u[0] for u in mycursor.fetchall()])
for field,reverse,regexp in condition_list:
if not field in ["same","related","usages"]:
table,column = corr_dict[field]
sql = f"SELECT ID FROM {table} WHERE {column} REGEXP '{regexp}';"
sql = f"SELECT ID FROM {table} WHERE {column} REGEXP '{regexp}' AND NOT obsolete;"
mycursor.execute(sql)
newmatch = set([u[0] for u in mycursor.fetchall()])
elif field in ["same","related"]:
table,col0,col1 = corr_dict[field]
sql1 = f"SELECT {col1} FROM {table} WHERE {col0} REGEXP '{regexp}';"
sql1 = f"SELECT {col1} FROM {table} WHERE {col0} REGEXP '{regexp}' AND NOT obsolete;"
mycursor.execute(sql1)
newmatch = set([u[0] for u in mycursor.fetchall()])
sql2 = f"SELECT {col0} FROM {table} WHERE {col1} REGEXP '{regexp}';"
sql2 = f"SELECT {col0} FROM {table} WHERE {col1} REGEXP '{regexp}' AND NOT obsolete;"
mycursor.execute(sql2)
newmatch = newmatch | set([u[0] for u in mycursor.fetchall()])
elif field == "usages":
table,cols = corr_dict[field][0],corr_dict[field][1:]
newmatch = set([])
for i in range(len(cols)):
sql = f"SELECT ID FROM {table} WHERE {cols[i]} REGEXP '{regexp}';"
sql = f"SELECT ID FROM {table} WHERE {cols[i]} REGEXP '{regexp}' AND NOT obsolete;"
mycursor.execute(sql)
newmatch = newmatch | set([u[0] for u in mycursor.fetchall()])
if reverse:
@ -1643,36 +1650,39 @@ def generateDictsfromMariaDB(mycursor):
for ret in tqdm.tqdm(ret_list,desc="生成题目字典"):
pro_dict[ret[0]] = {"id": ret[0], "content": ret[1], "ans": ret[2], "solution": ret[3], "genre": ret[4], "duration": ret[5], "origin": json.loads(ret[6]), "space": ret[7]}
sql = "SELECT * FROM objcorresp;" #生成objs
sql = "SELECT * FROM objcorresp WHERE NOT obsolete;" #生成objs
mycursor.execute(sql)
ret_list = mycursor.fetchall()
for id in pro_dict:
pro_dict[id]["objs"] = []
# print("生成目标对应中...")
for ret in tqdm.tqdm(ret_list,desc="生成目标对应"):
pro_dict[ret[0]]["objs"].append(ret[1])
if ret[0] in pro_dict:
pro_dict[ret[0]]["objs"].append(ret[1])
sql = "SELECT * FROM tagcorresp;" #生成tags
sql = "SELECT * FROM tagcorresp WHERE NOT obsolete;" #生成tags
mycursor.execute(sql)
ret_list = mycursor.fetchall()
for id in pro_dict:
pro_dict[id]["tags"] = []
# print("生成标签对应中...")
for ret in tqdm.tqdm(ret_list,desc = "生成标签对应"):
pro_dict[ret[0]]["tags"].append(ret[1])
if ret[0] in pro_dict:
pro_dict[ret[0]]["tags"].append(ret[1])
sql = "SELECT * FROM usages;" #生成usages
sql = "SELECT * FROM usages WHERE NOT obsolete;" #生成usages
mycursor.execute(sql)
ret_list = mycursor.fetchall()
for id in pro_dict:
pro_dict[id]["usages"] = []
# print("生成使用记录中...")
for ret in tqdm.tqdm(ret_list,desc="生成使用记录"):
u = "\t".join(json.loads(ret[3]))
if ret[1] is None:
pro_dict[ret[0]]["usages"].append(f"{ret[2]}\t{u}")
else:
pro_dict[ret[0]]["usages"].append(f"{ret[1]}\t{ret[2]}\t{u}")
if ret[0] in pro_dict:
u = "\t".join(json.loads(ret[3]))
if ret[1] is None:
pro_dict[ret[0]]["usages"].append(f"{ret[2]}\t{u}")
else:
pro_dict[ret[0]]["usages"].append(f"{ret[1]}\t{ret[2]}\t{u}")
sql = "SELECT * FROM edit_history;" #生成edit
mycursor.execute(sql)
@ -1681,48 +1691,53 @@ def generateDictsfromMariaDB(mycursor):
pro_dict[id]["edit"] = []
# print("生成编辑历史中...")
for ret in tqdm.tqdm(ret_list,desc="生成编辑历史"):
pro_dict[ret[0]]["edit"].append(f"{ret[1]}\t{ret[2]}")
if ret[0] in pro_dict:
pro_dict[ret[0]]["edit"].append(f"{ret[1]}\t{ret[2]}")
sql = "SELECT * FROM same;" #生成same
sql = "SELECT * FROM same WHERE NOT obsolete;" #生成same
mycursor.execute(sql)
ret_list = mycursor.fetchall()
for id in pro_dict:
pro_dict[id]["same"] = []
# print("生成same联系中...")
for ret in tqdm.tqdm(ret_list,desc="关联相同题目"):
pro_dict[ret[0]]["same"].append(ret[1])
pro_dict[ret[1]]["same"].append(ret[0])
if ret[0] in pro_dict and ret[1] in pro_dict:
pro_dict[ret[0]]["same"].append(ret[1])
pro_dict[ret[1]]["same"].append(ret[0])
sql = "SELECT * FROM related;" #生成related
sql = "SELECT * FROM related WHERE NOT obsolete;" #生成related
mycursor.execute(sql)
ret_list = mycursor.fetchall()
for id in pro_dict:
pro_dict[id]["related"] = []
# print("生成related联系中...")
for ret in tqdm.tqdm(ret_list,desc="关联相关题目"):
pro_dict[ret[0]]["related"].append(ret[1])
pro_dict[ret[1]]["related"].append(ret[0])
if ret[0] in pro_dict and ret[1] in pro_dict:
pro_dict[ret[0]]["related"].append(ret[1])
pro_dict[ret[1]]["related"].append(ret[0])
sql = "SELECT * FROM unrelated;" #生成unrelated
sql = "SELECT * FROM unrelated WHERE NOT obsolete;" #生成unrelated
mycursor.execute(sql)
ret_list = mycursor.fetchall()
for id in pro_dict:
pro_dict[id]["unrelated"] = []
# print("生成unrelated联系中...")
for ret in tqdm.tqdm(ret_list,desc="关联无关题目"):
pro_dict[ret[0]]["unrelated"].append(ret[1])
pro_dict[ret[1]]["unrelated"].append(ret[0])
if ret[0] in pro_dict and ret[1] in pro_dict:
pro_dict[ret[0]]["unrelated"].append(ret[1])
pro_dict[ret[1]]["unrelated"].append(ret[0])
sql = "SELECT * FROM remarks;" #生成remark
sql = "SELECT * FROM remarks WHERE NOT obsolete;" #生成remark
mycursor.execute(sql)
ret_list = mycursor.fetchall()
for id in pro_dict:
pro_dict[id]["remark"] = []
# print("生成备注中...")
for ret in tqdm.tqdm(ret_list,desc="生成备注"):
pro_dict[ret[0]]["remark"].append(f"{ret[1]}\t{ret[2]}")
if ret[0] in pro_dict:
pro_dict[ret[0]]["remark"].append(f"{ret[1]}\t{ret[2]}")
sql = "SELECT * FROM lessonobj;" #生成obj_dict
sql = "SELECT * FROM lessonobj WHERE NOT obsolete;" #生成obj_dict
mycursor.execute(sql)
ret_list = mycursor.fetchall()
# print("生成课时目标dict中...")
@ -1738,7 +1753,7 @@ def generateDictsfromMariaDB(mycursor):
for ret in tqdm.tqdm(ret_list,desc = "构建课时目标顺序"):
obj_dict[ret[0]]["predecessor"].append(ret[1])
sql = "SELECT * FROM unitobj;" #生成unit_obj_dict
sql = "SELECT * FROM unitobj WHERE NOT obsolete;" #生成unit_obj_dict
mycursor.execute(sql)
ret_list = mycursor.fetchall()
# print("生成单元目标dict中...")
@ -1746,21 +1761,22 @@ def generateDictsfromMariaDB(mycursor):
unit_obj_dict[ret[0]] = {"unitobjid":ret[0],"unitobjcontent":ret[1]}
sql = "SELECT * FROM basic_knowledges;" #生成bn_dict
sql = "SELECT * FROM basic_knowledges WHERE NOT obsolete;" #生成bn_dict
mycursor.execute(sql)
ret_list = mycursor.fetchall()
# print("生成基础知识dict中...")
for ret in tqdm.tqdm(ret_list,desc = "生成基础知识"):
bn_dict[ret[0]] = {"bnid":ret[0],"bncontent":ret[1]}
sql = "SELECT * FROM bn_obj_corresp;" #生成bn与obj的对应
sql = "SELECT * FROM bn_obj_corresp WHERE NOT obsolete;" #生成bn与obj的对应
mycursor.execute(sql)
ret_list = mycursor.fetchall()
for bnid in bn_dict:
bn_dict[bnid]["objs"] = []
# print("生成基础知识与课时目标对应中...")
for ret in tqdm.tqdm(ret_list,desc = "对应基础知识与课时目标"):
bn_dict[ret[0]]["objs"].append(ret[1])
if ret[0] in bn_dict:
bn_dict[ret[0]]["objs"].append(ret[1])
return pro_dict,obj_dict,bn_dict,unit_obj_dict
def generateLaTeXBodyContentFromDict(id,adict,objdict,misc): #根据id,读取的json内容adict,和字典misc来生成讲义
@ -1843,7 +1859,7 @@ def generateLaTeXBodyContentfromMariaDB(cursor,id,misc): #根据id,读取的json
# }
# }
id = str(id).zfill(6)
sql = "SELECT content,ans,solution,origin,space FROM problems WHERE ID = %s;"
sql = "SELECT content,ans,solution,origin,space FROM problems WHERE ID = %s AND NOT obsolete;"
val = (id,)
cursor.execute(sql,val)
ret_list = cursor.fetchall()
@ -1855,27 +1871,29 @@ def generateLaTeXBodyContentfromMariaDB(cursor,id,misc): #根据id,读取的json
solution = ""
origin = json.loads(raw_origin)
#以下生成obj_list
sql = "SELECT obj_ID FROM objcorresp WHERE ID = %s;"
sql = "SELECT obj_ID FROM objcorresp WHERE ID = %s AND NOT obsolete;"
cursor.execute(sql,val)
ret_list = cursor.fetchall()
obj_list = []
for id_raw in ret_list:
obj_id = id_raw[0]
sql = "SELECT obj_content FROM lessonobj WHERE objid = %s;"
sql = "SELECT obj_content FROM lessonobj WHERE objid = %s AND NOT obsolete;"
if not obj_id.upper() == "KNONE":
objval = (obj_id,)
cursor.execute(sql,objval)
obj_list.append(f"{obj_id}\t{cursor.fetchall()[0][0]}")
retobj = cursor.fetchall()
if len(retobj) >= 1:
obj_list.append(f"{obj_id}\t{retobj[0][0]}")
else:
cursor.fetchall()
obj_list.append(f"{obj_id}\t暂无目标对应")
sql = "SELECT tagname FROM tagcorresp WHERE ID = %s;"
sql = "SELECT tagname FROM tagcorresp WHERE ID = %s AND NOT obsolete;"
cursor.execute(sql,val)
tag_list = [t[0] for t in cursor.fetchall()]
sql = "SELECT date,remark_content FROM remarks WHERE ID = %s;"
sql = "SELECT date,remark_content FROM remarks WHERE ID = %s AND NOT obsolete;"
cursor.execute(sql,val)
remark_list = sorted([f"{t[0]}\t{t[1]}" for t in cursor.fetchall()])
sql = "SELECT date,classname,diff FROM usages WHERE ID = %s;"
sql = "SELECT date,classname,diff FROM usages WHERE ID = %s AND NOT obsolete;"
cursor.execute(sql,val)
usages_fetched = [(u[0] if not u[0] is None else "",u[1],json.loads(u[2])) for u in cursor.fetchall()]
usages_raw = sorted(usages_fetched)
@ -1943,7 +1961,7 @@ def generateLaTeXobjsfromMariaDB(cursor,objid):
if objid == "KNONE":
return ""
else:
sql = "SELECT obj_content FROM lessonobj WHERE objid = %s;"
sql = "SELECT obj_content FROM lessonobj WHERE objid = %s AND not obsolete;"
val = (objid,)
cursor.execute(sql,val)
obj_content = cursor.fetchall()[0][0]
@ -1952,7 +1970,7 @@ def generateLaTeXobjsfromMariaDB(cursor,objid):
def generateLaTeXbnsfromMariaDB(cursor,bnid):
bnid = str(bnid).upper().strip()
sql = "SELECT bn_content FROM basic_knowledges WHERE bn_id = %s;"
sql = "SELECT bn_content FROM basic_knowledges WHERE bn_id = %s AND not obsolete;"
val = (bnid,)
cursor.execute(sql,val)
try:
@ -2830,7 +2848,7 @@ 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 = database)
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 = '暂无对应' AND not obsolete;")
unittedids = set([ret[0] for ret in mycursor.fetchall()])
ununittedids = sorted(list(set(idlist)-unittedids))
return ununittedids
@ -3118,7 +3136,7 @@ def ChooseIDsByUsageInterval(startdate,enddate,interval,classregex,database): #
usedproblems = []
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;"
sql = "SELECT ID,date,classname,diff FROM usages where NOT obsolete;"
mycursor.execute(sql)
usage_list = mycursor.fetchall()
for id,date,classname,diff_raw in usage_list:
@ -3155,7 +3173,7 @@ def getAllIDsExp(database,obsincluded = True): #获取题库中所有题目的id
if obsincluded:
mycursor.execute("SELECT ID FROM problems;")
else:
mycursor.execute("SELECT ID FROM problems WHERE NOT content REGEXP 'OBS';")
mycursor.execute("SELECT ID FROM problems WHERE NOT obsolete;")
idlist = [ret[0] for ret in mycursor.fetchall()]
return generate_exp(idlist)
@ -3173,7 +3191,7 @@ def parseRemark(string): #从一行remark字符串中分出日期和内容, 返
def generateProDict(cursor): #从数据库的cursor中得到problems字典的content,ans,solution,genre字段
cursor.execute("select ID,content,ans,solution,genre,origin from problems;")
cursor.execute("select ID,content,ans,solution,genre,origin from problems WHERE NOT obsolete;")
ret_list = cursor.fetchall()
prodict = {ret[0]:{"content":ret[1],"ans":ret[2],"solution":ret[3],"genre":ret[4],"origin":json.loads(ret[5])} for ret in ret_list}
return prodict

View File

@ -33,7 +33,7 @@ class MyWindow_xgmb(QWidget,Ui_Form):
else:
self.obj_type = "error"
if self.obj_type == "lesson":
sql = "SELECT * FROM lessonobj WHERE objid = %s;"
sql = "SELECT * FROM lessonobj WHERE objid = %s AND NOT obsolete;"
val = (self.id,)
self.cursor.execute(sql,val)
ret_list = self.cursor.fetchall()
@ -44,7 +44,7 @@ class MyWindow_xgmb(QWidget,Ui_Form):
self.objcontent_raw = ret_list[0][1]
self.plainTextEdit_objcontent.setPlainText(self.objcontent_raw)
elif self.obj_type == "unit":
sql = "SELECT * FROM unitobj WHERE unit_obj_id = %s;"
sql = "SELECT * FROM unitobj WHERE unit_obj_id = %s AND NOT obsolete;"
val = (self.id,)
self.cursor.execute(sql,val)
ret_list = self.cursor.fetchall()

View File

@ -50,7 +50,7 @@ class MyWindow_sxth(QWidget,Ui_Form):
def exec(self):
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = self.database_name)
mycursor = mydb.cursor()
mycursor.execute("SELECT count(*) FROM problems WHERE NOT content REGEXP 'OBS';")
mycursor.execute("SELECT count(*) FROM problems WHERE NOT obsolete;")
self.lcdNumber_resCount.display(mycursor.fetchall()[0][0])
self.matchlist = MatchConditioninMariaDB(self.conditions,self.database_name)
self.lcdNumber_resCount.display(len(self.matchlist))

View File

@ -31,7 +31,7 @@ class MyWindow_scjl(QWidget,Ui_Form):
self.id = self.lineEdit_id.text().strip().zfill(6)
self.dateregex = self.lineEdit_dateregex.text().strip()
self.classregex = self.lineEdit_classregex.text().strip()
self.mycursor.execute("SELECT * FROM usages WHERE ID = %s;",(self.id,))
self.mycursor.execute("SELECT * FROM usages WHERE ID = %s AND not obsolete;",(self.id,))
ret_list = self.mycursor.fetchall()
self.usage_list = []
for ret in ret_list:
@ -47,15 +47,15 @@ class MyWindow_scjl(QWidget,Ui_Form):
self.pushButton_del.setEnabled(False)
def delete(self):
self.mycursor = self.db.cursor()
self.mycursor.execute("SELECT count(*) FROM usages;")
self.mycursor.execute("SELECT count(*) FROM usages WHERE not obsolete;")
print(f"预删除前有 {self.mycursor.fetchall()[0][0]} 条使用记录.")
sql1 = "DELETE FROM usages WHERE ID = %s AND date = %s AND classname = %s AND diff = %s;"
sql1 = "UPDATE usages SET obsolete = TRUE WHERE ID = %s AND date = %s AND classname = %s AND diff = %s;"
sql2 = "INSERT INTO logs (DATE,TIME,username,action,id,db_content) VALUE (%s,%s,%s,%s,%s,%s);"
for u in tqdm.tqdm(self.usage_list,desc = "删除使用记录"):
self.mycursor.execute(sql1,u)
self.mycursor.execute(sql1,u[:4])
val = (GetDate(),GetTime(),get_git_username(),"删除使用记录",self.id,f"{u}")
self.mycursor.execute(sql2,val)
self.mycursor.execute("SELECT count(*) FROM usages;")
self.mycursor.execute("SELECT count(*) FROM usages WHERE not obsolete;")
print(f"删除后将有 {self.mycursor.fetchall()[0][0]} 条使用记录.")
self.pushButton_commit.setEnabled(True)
def commit(self):

View File

@ -34,7 +34,7 @@ class MyWindow_scgx(QWidget,Ui_Form):
self.lineEdit_todelete.textChanged.connect(self.enable_del)
self.db = connect(hostname=db_host, port=db_port, username= db_user, pwd= db_pwd, db=self.database_name)
self.mycursor = self.db.cursor()
self.mycursor.execute("SELECT objid,obj_content FROM lessonobj;")
self.mycursor.execute("SELECT objid,obj_content FROM lessonobj WHERE not obsolete;")
ret_list = self.mycursor.fetchall()
self.allobjs = ""
for ret in ret_list:
@ -42,7 +42,7 @@ class MyWindow_scgx(QWidget,Ui_Form):
self.plainTextEdit_objs.setPlainText(self.allobjs)
def getobj(self):
objid = self.lineEdit_objid.text().strip()
self.mycursor.execute("SELECT objid,obj_content FROM lessonobj WHERE objid = %s;",(objid,))
self.mycursor.execute("SELECT objid,obj_content FROM lessonobj WHERE objid = %s AND not obsolete;",(objid,))
ret_list = self.mycursor.fetchall()
if len(ret_list) == 0 or len(ret_list) >= 2:
self.plainTextEdit_objs.setPlainText("目标编号有误, 请重试!!!\n\n"+self.allobjs)
@ -55,12 +55,12 @@ class MyWindow_scgx(QWidget,Ui_Form):
self.tableWidget_prec.setRowCount(0)
self.tableWidget_post.clearContents()
self.tableWidget_post.setRowCount(0)
self.mycursor.execute("SELECT inherit_from FROM objinherit WHERE objid = %s;",(self.objid,))
self.mycursor.execute("SELECT inherit_from FROM objinherit WHERE objid = %s AND not obsolete;",(self.objid,))
ret_list = self.mycursor.fetchall()
for ret in ret_list:
# print(ret)
count += 1
self.mycursor.execute("SELECT obj_content FROM lessonobj WHERE objid = %s;",(ret[0],))
self.mycursor.execute("SELECT obj_content FROM lessonobj WHERE objid = %s AND not obsolete;",(ret[0],))
prec_content = self.mycursor.fetchall()[0][0]
self.tableWidget_prec.insertRow(count-1)
self.tableWidget_prec.setItem(count-1,0,QTableWidgetItem(str(count)))
@ -68,13 +68,13 @@ class MyWindow_scgx(QWidget,Ui_Form):
self.tableWidget_prec.setItem(count-1,2,QTableWidgetItem(prec_content))
self.corresp_list.append((count,self.objid,ret[0]))
prec_count = count
self.mycursor.execute("SELECT objid FROM objinherit WHERE inherit_from = %s;",(self.objid,))
self.mycursor.execute("SELECT objid FROM objinherit WHERE inherit_from = %s AND not obsolete;",(self.objid,))
ret_list = self.mycursor.fetchall()
count = 0
for ret in ret_list:
# print(ret)
count += 1
self.mycursor.execute("SELECT obj_content FROM lessonobj WHERE objid = %s;",(ret[0],))
self.mycursor.execute("SELECT obj_content FROM lessonobj WHERE objid = %s AND not obsolete;",(ret[0],))
post_content = self.mycursor.fetchall()[0][0]
self.tableWidget_post.insertRow(count-1)
self.tableWidget_post.setItem(count-1,0,QTableWidgetItem(str(count+prec_count)))
@ -95,7 +95,7 @@ class MyWindow_scgx(QWidget,Ui_Form):
inherit_from = item[2]
break
self.mycursor = self.db.cursor()
self.mycursor.execute("DELETE FROM objinherit WHERE objid = %s AND inherit_from = %s;",(objid,inherit_from))
self.mycursor.execute("UPDATE objinherit SET obsolete = TRUE WHERE objid = %s AND inherit_from = %s;",(objid,inherit_from))
sql = "INSERT INTO logs (DATE,TIME,username,action,db_content) VALUE (%s,%s,%s,%s,%s);"
val = (GetDate(),GetTime(),get_git_username(),f"删除目标关联",f"{objid} <- {inherit_from}")
self.mycursor.execute(sql,val)

View File

@ -26,7 +26,7 @@ class MyWindow_sctp(QWidget,Ui_Form):
self.dpi = self.lineEdit_dpi.text()
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = self.database_name)
mycursor = mydb.cursor()
sql = "SELECT content FROM problems WHERE ID = %s;"
sql = "SELECT content FROM problems WHERE ID = %s AND NOT obsolete;"
val = (self.id.strip().zfill(6),)
mycursor.execute(sql,val)
content = mycursor.fetchall()[0][0]

View File

@ -30,7 +30,7 @@ class MyWindow_bjjc(QWidget,Ui_Form):
self.id = self.lineEdit_bnid.text().upper()
if not self.id[0] == "B":
self.id = "B" + str(int(self.id)).zfill(5)
sql = "SELECT * FROM basic_knowledges WHERE bn_id = %s;"
sql = "SELECT * FROM basic_knowledges WHERE bn_id = %s AND not obsolete;"
val = (self.id,)
self.cursor.execute(sql,val)
ret_list = self.cursor.fetchall()
@ -39,7 +39,7 @@ class MyWindow_bjjc(QWidget,Ui_Form):
else:
self.bn_content_raw = ret_list[0][1]
self.plainTextEdit_content.setPlainText(self.bn_content_raw)
sql = "SELECT * from bn_obj_corresp WHERE bn_id = %s;"
sql = "SELECT * from bn_obj_corresp WHERE bn_id = %s AND not obsolete;"
val = (self.id,)
self.cursor.execute(sql,val)
ret_list = self.cursor.fetchall()
@ -48,10 +48,14 @@ class MyWindow_bjjc(QWidget,Ui_Form):
for ret in ret_list:
count += 1
objid = ret[1]
sql = "SELECT * FROM lessonobj WHERE objid = %s;"
sql = "SELECT * FROM lessonobj WHERE objid = %s AND not obsolete;"
val = (objid,)
self.cursor.execute(sql,val)
obj_content = self.cursor.fetchall()[0][1]
retcontent = self.cursor.fetchall()
if len(retcontent) >= 1:
obj_content = retcontent[0][1]
else:
obj_content = "已作废"
self.tableWidget_obj.setItem(count-1,0,QTableWidgetItem(objid))
self.tableWidget_obj.setItem(count-1,1,QTableWidgetItem(obj_content))

View File

@ -20,11 +20,11 @@ def show_image():
id = request.form['question_number'].zfill(6)
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = "tiku")
mycursor = mydb.cursor()
sql = "SELECT content FROM problems WHERE ID = %s;"
sql = "SELECT content FROM problems WHERE ID = %s AND not obsolete;"
val = (id,)
mycursor.execute(sql,val)
content = mycursor.fetchall()[0][0]
sql = "SELECT date,remark_content FROM remarks WHERE ID = %s;"
sql = "SELECT date,remark_content FROM remarks WHERE ID = %s AND not obsolete;"
mycursor.execute(sql,val)
remark_list = sorted(mycursor.fetchall(),key=lambda item:item[0],reverse=True)
# print(remark_list)
@ -71,7 +71,7 @@ def submit_remarks():
# mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = "tikutest")
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = "tiku")
mycursor = mydb.cursor()
sql = f"SELECT * FROM remarks WHERE ID = %s and remark_content = %s;"
sql = f"SELECT * FROM remarks WHERE ID = %s and remark_content = %s AND not obsolete;"
val = (id,f"({category}){remarks}")
print(f"({category}){remarks}")
mycursor.execute(sql,val)

View File

@ -37,7 +37,7 @@ class MyWindow_bdsl(QWidget,Ui_Form):
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = self.database_name)
mycursor = mydb.cursor()
mycursor.execute("SELECT ID,content FROM problems;")
mycursor.execute("SELECT ID,content FROM problems WHERE NOT obsolete;")
ret_list = mycursor.fetchall()
pro_dict = {i:j for i,j in ret_list}
treated_dict = {i:pre_treating(pro_dict[i]) for i in pro_dict.keys()}

View File

@ -52,7 +52,7 @@ class MyWindow_tjjc(QWidget,Ui_Form):
mycursor.execute(sql,val)
print(f"已导入基础知识 编号: {bnid},\n 内容: {content}.")
for objid in obj_list:
sql = "SELECT * FROM lessonobj WHERE objid = %s;"
sql = "SELECT * FROM lessonobj WHERE objid = %s AND NOT obsolete;"
val = (objid,)
mycursor.execute(sql,val)
ret =mycursor.fetchall()

View File

@ -28,7 +28,7 @@ class MyWindow_xzgx(QWidget,Ui_Form):
self.plainTextEdit_data.textChanged.connect(self.disable_import)
self.db = connect(hostname=db_host, port=db_port, username= db_user, pwd= db_pwd, db=self.database_name)
self.mycursor = self.db.cursor()
self.mycursor.execute("SELECT objid from lessonobj;")
self.mycursor.execute("SELECT objid from lessonobj WHERE NOT obsolete;")
self.objids = [item[0] for item in self.mycursor.fetchall()]
# print(self.objids)
@ -70,7 +70,7 @@ class MyWindow_xzgx(QWidget,Ui_Form):
for line in tqdm.tqdm(self.valid_lines):
mainid = line[0]
for precid in line[1]:
self.mycursor.execute("SELECT * FROM objinherit WHERE objid = %s AND inherit_from = %s;",(mainid,precid))
self.mycursor.execute("SELECT * FROM objinherit WHERE objid = %s AND inherit_from = %s AND not obsolete;",(mainid,precid))
ret_list = self.mycursor.fetchall()
if len(ret_list) >= 1:
output += f"*** {mainid}{precid} 为前序的记录已在数据库 {self.database_name}\n"

View File

@ -119,7 +119,7 @@ def index():
# raw_pro_dict = load_dict("../题库0.3/Problems.json")
# obj_dict = load_dict("../题库0.3/LessonObj.json")
# basicknowledge_dict = load_dict("../题库0.3/BasicKnowledge.json")
mycursor.execute("SELECT ID FROM problems;")
mycursor.execute("SELECT ID FROM problems WHERE NOT obsolete;")
id_list_in_DB = [ret[0] for ret in mycursor.fetchall()]
id_dict = {a:[] for a in id_list_in_DB}
problems_list = generate_number_set(pid,id_dict)

View File

@ -29,7 +29,7 @@ class MyWindow_sjlb(QWidget,Ui_Form):
buttontext = self.sender().text()
# print(buttontext)
self.mycursor = self.db.cursor()
self.mycursor.execute("SELECT name,idexp,remark FROM papers WHERE genre = %s;",(buttontext,))
self.mycursor.execute("SELECT name,idexp,remark FROM papers WHERE genre = %s AND NOT obsolete;",(buttontext,))
ret_list = self.mycursor.fetchall()
self.tableWidget_papers.setRowCount(len(ret_list))
count = 0

View File

@ -38,7 +38,7 @@ class MyWindow_bjtm(QWidget,Ui_Form):
def showcontent(self):
self.field = "题目内容"
self.label_2.setText(f"题号 {self.lineEdit_ID.text()}{self.field} 字段")
sql = "SELECT content FROM problems WHERE ID = (%s);"
sql = "SELECT content FROM problems WHERE ID = (%s) AND NOT obsolete;"
val = (self.lineEdit_ID.text().zfill(6),)
self.cursor.execute(sql,val)
ret = self.cursor.fetchall()
@ -50,7 +50,7 @@ class MyWindow_bjtm(QWidget,Ui_Form):
def showgenre(self):
self.field = "类型"
self.label_2.setText(f"题号 {self.lineEdit_ID.text()}{self.field} 字段")
sql = "SELECT genre FROM problems WHERE ID = (%s);"
sql = "SELECT genre FROM problems WHERE ID = (%s) AND NOT obsolete;"
val = (self.lineEdit_ID.text().zfill(6),)
self.cursor.execute(sql,val)
ret = self.cursor.fetchall()
@ -62,7 +62,7 @@ class MyWindow_bjtm(QWidget,Ui_Form):
def showans(self):
self.field = "答案"
self.label_2.setText(f"题号 {self.lineEdit_ID.text()}{self.field} 字段")
sql = "SELECT ans FROM problems WHERE ID = (%s);"
sql = "SELECT ans FROM problems WHERE ID = (%s) AND NOT obsolete;"
val = (self.lineEdit_ID.text().zfill(6),)
self.cursor.execute(sql,val)
ret = self.cursor.fetchall()
@ -74,7 +74,7 @@ class MyWindow_bjtm(QWidget,Ui_Form):
def showsolution(self):
self.field = "解答"
self.label_2.setText(f"题号 {self.lineEdit_ID.text()}{self.field} 字段")
sql = "SELECT solution FROM problems WHERE ID = (%s);"
sql = "SELECT solution FROM problems WHERE ID = (%s) AND NOT obsolete;"
val = (self.lineEdit_ID.text().zfill(6),)
self.cursor.execute(sql,val)
ret = self.cursor.fetchall()
@ -86,7 +86,7 @@ class MyWindow_bjtm(QWidget,Ui_Form):
def showorigin(self):
self.field = "来源"
self.label_2.setText(f"题号 {self.lineEdit_ID.text()}{self.field} 字段")
sql = "SELECT origin FROM problems WHERE ID = (%s);"
sql = "SELECT origin FROM problems WHERE ID = (%s) AND NOT obsolete;"
val = (self.lineEdit_ID.text().zfill(6),)
self.cursor.execute(sql,val)
ret = self.cursor.fetchall()
@ -98,7 +98,7 @@ class MyWindow_bjtm(QWidget,Ui_Form):
def showremarks(self):
self.field = "备注"
self.label_2.setText(f"题号 {self.lineEdit_ID.text()}{self.field} 字段")
sql = "SELECT date,remark_content FROM remarks WHERE ID = (%s);"
sql = "SELECT date,remark_content FROM remarks WHERE ID = (%s) AND NOT obsolete;"
val = (self.lineEdit_ID.text().zfill(6),)
self.cursor.execute(sql,val)
ret_list = self.cursor.fetchall()