Merge commit '40306c286445c0017a8e67ae38ff80babec87e91'

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

View File

@ -33,7 +33,7 @@ class MyWindow_xgmb(QWidget,Ui_Form):
else: else:
self.obj_type = "error" self.obj_type = "error"
if self.obj_type == "lesson": 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,) val = (self.id,)
self.cursor.execute(sql,val) self.cursor.execute(sql,val)
ret_list = self.cursor.fetchall() ret_list = self.cursor.fetchall()
@ -44,7 +44,7 @@ class MyWindow_xgmb(QWidget,Ui_Form):
self.objcontent_raw = ret_list[0][1] self.objcontent_raw = ret_list[0][1]
self.plainTextEdit_objcontent.setPlainText(self.objcontent_raw) self.plainTextEdit_objcontent.setPlainText(self.objcontent_raw)
elif self.obj_type == "unit": 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,) val = (self.id,)
self.cursor.execute(sql,val) self.cursor.execute(sql,val)
ret_list = self.cursor.fetchall() ret_list = self.cursor.fetchall()

View File

@ -50,7 +50,7 @@ class MyWindow_sxth(QWidget,Ui_Form):
def exec(self): def exec(self):
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = self.database_name) mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = self.database_name)
mycursor = mydb.cursor() 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.lcdNumber_resCount.display(mycursor.fetchall()[0][0])
self.matchlist = MatchConditioninMariaDB(self.conditions,self.database_name) self.matchlist = MatchConditioninMariaDB(self.conditions,self.database_name)
self.lcdNumber_resCount.display(len(self.matchlist)) 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.id = self.lineEdit_id.text().strip().zfill(6)
self.dateregex = self.lineEdit_dateregex.text().strip() self.dateregex = self.lineEdit_dateregex.text().strip()
self.classregex = self.lineEdit_classregex.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() ret_list = self.mycursor.fetchall()
self.usage_list = [] self.usage_list = []
for ret in ret_list: for ret in ret_list:
@ -47,15 +47,15 @@ class MyWindow_scjl(QWidget,Ui_Form):
self.pushButton_del.setEnabled(False) self.pushButton_del.setEnabled(False)
def delete(self): def delete(self):
self.mycursor = self.db.cursor() 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]} 条使用记录.") 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);" 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 = "删除使用记录"): 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}") val = (GetDate(),GetTime(),get_git_username(),"删除使用记录",self.id,f"{u}")
self.mycursor.execute(sql2,val) 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]} 条使用记录.") print(f"删除后将有 {self.mycursor.fetchall()[0][0]} 条使用记录.")
self.pushButton_commit.setEnabled(True) self.pushButton_commit.setEnabled(True)
def commit(self): def commit(self):

View File

@ -34,7 +34,7 @@ class MyWindow_scgx(QWidget,Ui_Form):
self.lineEdit_todelete.textChanged.connect(self.enable_del) 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.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 = 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() ret_list = self.mycursor.fetchall()
self.allobjs = "" self.allobjs = ""
for ret in ret_list: for ret in ret_list:
@ -42,7 +42,7 @@ class MyWindow_scgx(QWidget,Ui_Form):
self.plainTextEdit_objs.setPlainText(self.allobjs) self.plainTextEdit_objs.setPlainText(self.allobjs)
def getobj(self): def getobj(self):
objid = self.lineEdit_objid.text().strip() 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() ret_list = self.mycursor.fetchall()
if len(ret_list) == 0 or len(ret_list) >= 2: if len(ret_list) == 0 or len(ret_list) >= 2:
self.plainTextEdit_objs.setPlainText("目标编号有误, 请重试!!!\n\n"+self.allobjs) 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_prec.setRowCount(0)
self.tableWidget_post.clearContents() self.tableWidget_post.clearContents()
self.tableWidget_post.setRowCount(0) 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() ret_list = self.mycursor.fetchall()
for ret in ret_list: for ret in ret_list:
# print(ret) # print(ret)
count += 1 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] prec_content = self.mycursor.fetchall()[0][0]
self.tableWidget_prec.insertRow(count-1) self.tableWidget_prec.insertRow(count-1)
self.tableWidget_prec.setItem(count-1,0,QTableWidgetItem(str(count))) 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.tableWidget_prec.setItem(count-1,2,QTableWidgetItem(prec_content))
self.corresp_list.append((count,self.objid,ret[0])) self.corresp_list.append((count,self.objid,ret[0]))
prec_count = count 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() ret_list = self.mycursor.fetchall()
count = 0 count = 0
for ret in ret_list: for ret in ret_list:
# print(ret) # print(ret)
count += 1 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] post_content = self.mycursor.fetchall()[0][0]
self.tableWidget_post.insertRow(count-1) self.tableWidget_post.insertRow(count-1)
self.tableWidget_post.setItem(count-1,0,QTableWidgetItem(str(count+prec_count))) 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] inherit_from = item[2]
break break
self.mycursor = self.db.cursor() 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);" 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}") val = (GetDate(),GetTime(),get_git_username(),f"删除目标关联",f"{objid} <- {inherit_from}")
self.mycursor.execute(sql,val) self.mycursor.execute(sql,val)

View File

@ -26,7 +26,7 @@ class MyWindow_sctp(QWidget,Ui_Form):
self.dpi = self.lineEdit_dpi.text() self.dpi = self.lineEdit_dpi.text()
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = self.database_name) mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = self.database_name)
mycursor = mydb.cursor() 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),) val = (self.id.strip().zfill(6),)
mycursor.execute(sql,val) mycursor.execute(sql,val)
content = mycursor.fetchall()[0][0] content = mycursor.fetchall()[0][0]

View File

@ -30,7 +30,7 @@ class MyWindow_bjjc(QWidget,Ui_Form):
self.id = self.lineEdit_bnid.text().upper() self.id = self.lineEdit_bnid.text().upper()
if not self.id[0] == "B": if not self.id[0] == "B":
self.id = "B" + str(int(self.id)).zfill(5) 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,) val = (self.id,)
self.cursor.execute(sql,val) self.cursor.execute(sql,val)
ret_list = self.cursor.fetchall() ret_list = self.cursor.fetchall()
@ -39,7 +39,7 @@ class MyWindow_bjjc(QWidget,Ui_Form):
else: else:
self.bn_content_raw = ret_list[0][1] self.bn_content_raw = ret_list[0][1]
self.plainTextEdit_content.setPlainText(self.bn_content_raw) 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,) val = (self.id,)
self.cursor.execute(sql,val) self.cursor.execute(sql,val)
ret_list = self.cursor.fetchall() ret_list = self.cursor.fetchall()
@ -48,10 +48,14 @@ class MyWindow_bjjc(QWidget,Ui_Form):
for ret in ret_list: for ret in ret_list:
count += 1 count += 1
objid = ret[1] objid = ret[1]
sql = "SELECT * FROM lessonobj WHERE objid = %s;" sql = "SELECT * FROM lessonobj WHERE objid = %s AND not obsolete;"
val = (objid,) val = (objid,)
self.cursor.execute(sql,val) 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,0,QTableWidgetItem(objid))
self.tableWidget_obj.setItem(count-1,1,QTableWidgetItem(obj_content)) 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) id = request.form['question_number'].zfill(6)
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = "tiku") mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = "tiku")
mycursor = mydb.cursor() mycursor = mydb.cursor()
sql = "SELECT content FROM problems WHERE ID = %s;" sql = "SELECT content FROM problems WHERE ID = %s AND not obsolete;"
val = (id,) val = (id,)
mycursor.execute(sql,val) mycursor.execute(sql,val)
content = mycursor.fetchall()[0][0] 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) mycursor.execute(sql,val)
remark_list = sorted(mycursor.fetchall(),key=lambda item:item[0],reverse=True) remark_list = sorted(mycursor.fetchall(),key=lambda item:item[0],reverse=True)
# print(remark_list) # 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 = "tikutest")
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = "tiku") mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = "tiku")
mycursor = mydb.cursor() 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}") val = (id,f"({category}){remarks}")
print(f"({category}){remarks}") print(f"({category}){remarks}")
mycursor.execute(sql,val) 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) mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = self.database_name)
mycursor = mydb.cursor() mycursor = mydb.cursor()
mycursor.execute("SELECT ID,content FROM problems;") mycursor.execute("SELECT ID,content FROM problems WHERE NOT obsolete;")
ret_list = mycursor.fetchall() ret_list = mycursor.fetchall()
pro_dict = {i:j for i,j in ret_list} pro_dict = {i:j for i,j in ret_list}
treated_dict = {i:pre_treating(pro_dict[i]) for i in pro_dict.keys()} 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) mycursor.execute(sql,val)
print(f"已导入基础知识 编号: {bnid},\n 内容: {content}.") print(f"已导入基础知识 编号: {bnid},\n 内容: {content}.")
for objid in obj_list: for objid in obj_list:
sql = "SELECT * FROM lessonobj WHERE objid = %s;" sql = "SELECT * FROM lessonobj WHERE objid = %s AND NOT obsolete;"
val = (objid,) val = (objid,)
mycursor.execute(sql,val) mycursor.execute(sql,val)
ret =mycursor.fetchall() ret =mycursor.fetchall()

View File

@ -28,7 +28,7 @@ class MyWindow_xzgx(QWidget,Ui_Form):
self.plainTextEdit_data.textChanged.connect(self.disable_import) 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.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 = 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()] self.objids = [item[0] for item in self.mycursor.fetchall()]
# print(self.objids) # print(self.objids)
@ -70,7 +70,7 @@ class MyWindow_xzgx(QWidget,Ui_Form):
for line in tqdm.tqdm(self.valid_lines): for line in tqdm.tqdm(self.valid_lines):
mainid = line[0] mainid = line[0]
for precid in line[1]: 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() ret_list = self.mycursor.fetchall()
if len(ret_list) >= 1: if len(ret_list) >= 1:
output += f"*** {mainid}{precid} 为前序的记录已在数据库 {self.database_name}\n" 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") # raw_pro_dict = load_dict("../题库0.3/Problems.json")
# obj_dict = load_dict("../题库0.3/LessonObj.json") # obj_dict = load_dict("../题库0.3/LessonObj.json")
# basicknowledge_dict = load_dict("../题库0.3/BasicKnowledge.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_list_in_DB = [ret[0] for ret in mycursor.fetchall()]
id_dict = {a:[] for a in id_list_in_DB} id_dict = {a:[] for a in id_list_in_DB}
problems_list = generate_number_set(pid,id_dict) problems_list = generate_number_set(pid,id_dict)

View File

@ -29,7 +29,7 @@ class MyWindow_sjlb(QWidget,Ui_Form):
buttontext = self.sender().text() buttontext = self.sender().text()
# print(buttontext) # print(buttontext)
self.mycursor = self.db.cursor() 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() ret_list = self.mycursor.fetchall()
self.tableWidget_papers.setRowCount(len(ret_list)) self.tableWidget_papers.setRowCount(len(ret_list))
count = 0 count = 0

View File

@ -38,7 +38,7 @@ class MyWindow_bjtm(QWidget,Ui_Form):
def showcontent(self): def showcontent(self):
self.field = "题目内容" self.field = "题目内容"
self.label_2.setText(f"题号 {self.lineEdit_ID.text()}{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),) val = (self.lineEdit_ID.text().zfill(6),)
self.cursor.execute(sql,val) self.cursor.execute(sql,val)
ret = self.cursor.fetchall() ret = self.cursor.fetchall()
@ -50,7 +50,7 @@ class MyWindow_bjtm(QWidget,Ui_Form):
def showgenre(self): def showgenre(self):
self.field = "类型" self.field = "类型"
self.label_2.setText(f"题号 {self.lineEdit_ID.text()}{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),) val = (self.lineEdit_ID.text().zfill(6),)
self.cursor.execute(sql,val) self.cursor.execute(sql,val)
ret = self.cursor.fetchall() ret = self.cursor.fetchall()
@ -62,7 +62,7 @@ class MyWindow_bjtm(QWidget,Ui_Form):
def showans(self): def showans(self):
self.field = "答案" self.field = "答案"
self.label_2.setText(f"题号 {self.lineEdit_ID.text()}{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),) val = (self.lineEdit_ID.text().zfill(6),)
self.cursor.execute(sql,val) self.cursor.execute(sql,val)
ret = self.cursor.fetchall() ret = self.cursor.fetchall()
@ -74,7 +74,7 @@ class MyWindow_bjtm(QWidget,Ui_Form):
def showsolution(self): def showsolution(self):
self.field = "解答" self.field = "解答"
self.label_2.setText(f"题号 {self.lineEdit_ID.text()}{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),) val = (self.lineEdit_ID.text().zfill(6),)
self.cursor.execute(sql,val) self.cursor.execute(sql,val)
ret = self.cursor.fetchall() ret = self.cursor.fetchall()
@ -86,7 +86,7 @@ class MyWindow_bjtm(QWidget,Ui_Form):
def showorigin(self): def showorigin(self):
self.field = "来源" self.field = "来源"
self.label_2.setText(f"题号 {self.lineEdit_ID.text()}{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),) val = (self.lineEdit_ID.text().zfill(6),)
self.cursor.execute(sql,val) self.cursor.execute(sql,val)
ret = self.cursor.fetchall() ret = self.cursor.fetchall()
@ -98,7 +98,7 @@ class MyWindow_bjtm(QWidget,Ui_Form):
def showremarks(self): def showremarks(self):
self.field = "备注" self.field = "备注"
self.label_2.setText(f"题号 {self.lineEdit_ID.text()}{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),) val = (self.lineEdit_ID.text().zfill(6),)
self.cursor.execute(sql,val) self.cursor.execute(sql,val)
ret_list = self.cursor.fetchall() ret_list = self.cursor.fetchall()