feat: init repo

This commit is contained in:
2023-11-29 16:17:06 +08:00
parent 26989a0d6f
commit 32e6af1ae8
10 changed files with 2831 additions and 0 deletions

265
DataSearch.py Normal file
View File

@@ -0,0 +1,265 @@
import re
import pymysql
# 拆分sql对象
def extract_tables(sql_statement):
# 使用正则表达式匹配FROM关键字之后的表名以及逗号分隔的表名
pattern = r'FROM\s+([\w\s,]+)'
matches = re.findall(pattern, sql_statement, re.IGNORECASE)
# 提取逗号分隔的表名,并按逗号进行分割
tabs = re.split(',', matches[0].strip())
# 处理每个表名,去除空格和其他无关字符
cleaned_tables = []
for tab in tabs:
cleaned_tab = tab.strip()
if ' ' in cleaned_tab:
cleaned_tab = cleaned_tab.split()[0]
cleaned_tables.append(cleaned_tab)
return cleaned_tables # 返回列表
# 拆分sql
def divide_sql(sql):
"""
例如sql = "SELECT a FROM data1, data2, data3 WHERE a = b ORDER BY misc"
拆分原语句
"""
parts = re.split(r'(?i)from\s', sql) # 拆分"from "【无论大小写】
head = parts[0] + "from " # SELECT a FROM
divide_sqls = []
if re.search(r'where', parts[1], flags=re.IGNORECASE):
data = re.split(r'(?i) where', parts[1]) # 拆分" where"【无论大小写】
tail = " where" + data[1] # WHERE a = b ORDER BY misc
# message_p = "涉及到的数据源有:"
# print(message_p)
# time.sleep(sleep_time)
#
# message_p = data[0]
# print(message_p) # data1, data2, data3
# time.sleep(sleep_time)
divide_providers = data[0].split(", ")
# total = len(divide_providers)
# message_p = "拆分结果如下:"
# print(message_p)
for i in range(len(divide_providers)):
divide_sqls.append(head + divide_providers[i] + tail)
# message_p = str(i + 1) + ":" + divide_sqls[i]
# print(message_p)
else:
data = parts[1] # data1,data2,data3
divide_providers = data.split(",")
for i in range(len(divide_providers)):
divide_sqls.append(head + divide_providers[i])
# message_p = str(i + 1) + ":" + divide_sqls[i]
# print(message_p)
return divide_sqls
class SelectDatabase: # 定义类
def __init__(self, database):
self.database = database # 赋值数据库名称
def ret_hospital(self): # 定义函数返回字典——医院HOS这个表
# 连接服务器Server的数据库:
db = pymysql.connect(host='localhost', user='root', password='111111', db=f'{self.database}', charset='utf8')
# 使用操作游标:
cursor = db.cursor()
sql = """SELECT * FROM HOS"""
cursor.execute(sql)
results = cursor.fetchall() # 获取查询结果的所有数据
hospital_dict = {} # 创建一个空字典
# 遍历查询结果,将每条消息数据存储到字典中:
for row in results:
hos_id = row[0] # 医院编号(HOS_ID)
hos_name = row[1] # 医院名称(HOS_NAME)
hos_add = row[2] # 医院地址(HOS_ADD)
hos_tel = row[3] # 医院电话(HOS_TEL)
# hospital_dict["医院编号"] = hos_id
# hospital_dict["医院名称"] = hos_name
# hospital_dict["医院地址"] = hos_add
# hospital_dict["医院电话"] = hos_tel
# # 打印字典内容
# print(hospital_dict)
""" 注释的输出形式:
{'医院编号': '001', '医院名称': '极光医院', '医院地址': '千里市广大区极光街道1-1', '医院电话': '023-6296666'}
{'医院编号': '002', '医院名称': '风舱医院', '医院地址': '风火市舱山区飞光街道1-1', '医院电话': '023-6286666'}
"""
# 将每个属性的值存储在对应的列表中
hospital_dict.setdefault("医院编号", []).append(hos_id)
hospital_dict.setdefault("医院名称", []).append(hos_name)
hospital_dict.setdefault("医院地址", []).append(hos_add)
hospital_dict.setdefault("医院电话", []).append(hos_tel)
db.close()
""" 当前返回的字典形式:
{'医院编号': ['001', '002'],
'医院名称': ['极光医院', '风舱医院'],
'医院地址': ['千里市广大区极光街道1-1',
'风火市舱山区飞光街道1-1'],
'医院电话': ['023-6296666', '023-6286666']}
"""
# 返回字典
return hospital_dict
def ret_doctor(self): # 定义函数返回字典——医生DOC这个表
# 连接服务器Server的数据库:
db = pymysql.connect(host='localhost', user='root', password='111111', db=f'{self.database}', charset='utf8')
# 使用操作游标:
cursor = db.cursor()
sql = """SELECT * FROM DOC"""
cursor.execute(sql)
results = cursor.fetchall() # 获取查询结果的所有数据
doctor_dict = {} # 创建一个空字典
# 遍历查询结果,将每条消息数据存储到字典中:
for row in results:
doc_id = row[0] # 医生编号(DOC_ID)
doc_name = row[1] # 医生名称(DOC_NAME)
doc_tel = row[2] # 医生电话(DOC_TEL)
doc_qua = row[3] # 医院资质(DOC_QUA)
# hospital_dict["医生编号"] = doc_id
# hospital_dict["医生名称"] = doc_name
# hospital_dict["医院地址"] = doc_tel
# hospital_dict["医院电话"] = doc_qua
# # 打印字典内容
# print(doctor_dict)
# 将每个属性的值存储在对应的列表中
doctor_dict.setdefault("医院编号", []).append(doc_id)
doctor_dict.setdefault("医院名称", []).append(doc_name)
doctor_dict.setdefault("医院地址", []).append(doc_tel)
doctor_dict.setdefault("医院电话", []).append(doc_qua)
db.close()
""" 当前返回的字典形式:
{'医院编号': ['001', '002', '003'],
'医院名称': ['神医华佗', '扁鹊', '还医生'],
'医院地址': ['19666666666', '13666666666', '13546981623'],
'医院电话': ['主任医师', '主任医师', '医师']}
"""
# 返回字典
return doctor_dict
def ret_patient(self): # 定义函数返回字典——病人PAT这个表
# 连接服务器Server的数据库:
db = pymysql.connect(host='localhost', user='root', password='111111', db=f'{self.database}', charset='utf8')
# 使用操作游标:
cursor = db.cursor()
sql = """SELECT * FROM PAT"""
cursor.execute(sql)
results = cursor.fetchall() # 获取查询结果的所有数据
patient_dict = {} # 创建一个空字典
# 遍历查询结果,将每条消息数据存储到字典中:
for row in results:
pat_id = row[0] # 病人编号(PAT_ID)
pat_name = row[1] # 病人姓名(PAT_NAME)
pat_tel = row[2] # 病人电话(PAT_TEL)
# patient_dict["病人编号"] = pat_id
# patient_dict["病人姓名"] = pat_name
# patient_dict["病人电话"] = pat_tel
# # 打印字典内容
# print(patient_dict)
# 将每个属性的值存储在对应的列表中
patient_dict.setdefault("病人编号", []).append(pat_id)
patient_dict.setdefault("病人姓名", []).append(pat_name)
patient_dict.setdefault("病人电话", []).append(pat_tel)
db.close()
""" 当前返回的字典形式:
{'病人编号': ['001', '002', '003', '004'],
'病人姓名': ['曹操', '蔡桓公', '去还', '刘备'],
'病人电话': ['66666666666', '02666666666', '01234567891', '98765432101']}
"""
# 返回字典
return patient_dict
def ret_diagnosis(self): # 定义函数返回字典——诊断DIA这个表
# 连接服务器Server的数据库:
db = pymysql.connect(host='localhost', user='root', password='111111', db=f'{self.database}', charset='utf8')
# 使用操作游标:
cursor = db.cursor()
sql = """SELECT * FROM DIA"""
cursor.execute(sql)
results = cursor.fetchall() # 获取查询结果的所有数据
diagnosis_dict = {} # 创建一个空字典
# 遍历查询结果,将每条消息数据存储到字典中:
for row in results:
dia_id = row[0] # 诊号(DIA_ID)
doc_id = row[1] # 医生编号(DOC_ID)
pat_id = row[2] # 病人编号(PAT_ID)
time = row[3] # 时间(TIME)
cases = row[4] # 病例(CASES)
symptom = row[5] # 症状(SYMPTOM)
# diagnosis_dict["诊号"] = dia_id
# diagnosis_dict["医生编号"] = doc_id
# diagnosis_dict["病人编号"] = pat_id
# diagnosis_dict["时间"] = time
# diagnosis_dict["病例"] = cases
# diagnosis_dict["症状"] = symptom
# # 打印字典内容
# print(diagnosis_dict)
# 将每个属性的值存储在对应的列表中
diagnosis_dict.setdefault("诊号", []).append(dia_id)
diagnosis_dict.setdefault("医生编号", []).append(doc_id)
diagnosis_dict.setdefault("病人编号", []).append(pat_id)
diagnosis_dict.setdefault("时间", []).append(time)
diagnosis_dict.setdefault("病例", []).append(cases)
diagnosis_dict.setdefault("症状", []).append(symptom)
db.close()
""" 当前返回的字典形式:
{'诊号': ['001', '002', '003', '004', '005'],
'医生编号': ['001', '001', '002', '003', '003'],
'病人编号': ['001', '001', '002', '003', '004'],
'时间': ['2015.03.04', '2015.05.16', '2016.12.30', '2017.01.15', '2017.01.15'],
'病例': ['小感冒', '慢性头痛', '通风', '中风', '脚部内伤'], '症状': ['突然头痛', '头非常痛,不能睡觉', '怕凉', '伤口大量出血,且发烧', '崴脚,走路痛']}
"""
# 返回字典
return diagnosis_dict
def ret_define(self, sql): # 定义函数,返回自定义信息的字典
# 连接服务器Server的数据库:
db = pymysql.connect(host='localhost', user='root', password='111111', db=f'{self.database}', charset='utf8')
try:
# 使用操作游标:
cursor = db.cursor()
cursor.execute(sql)
results = cursor.fetchall() # 获取查询结果的所有数据
# tables = extract_tables(sql) # 分离出sql语句中的表名
# 遍历查询结果,将每条消息都输出出来:
for row in results:
for i in range(len(row)):
print(f"{row[i]}\t", end="")
print()
except:
print("查询权限不足!或查询语句出错!")
def main(hospital_name):
sql = """SELECT *
FROM HOS, DOC, PAT, DIA
WHERE DOC.DOC_ID = DIA.DOC_ID AND
PAT.PAT_ID = DIA.PAT_ID
"""
hospital_name = hospital_name.replace("\n", "")
if hospital_name == 'xx大学附属医院':
database = SelectDatabase('Hospital1')
database.ret_define(sql)
elif hospital_name == 'xx阳光社区附属医院':
database = SelectDatabase('Hospital2')
database.ret_define(sql)
else:
print("暂无记录!")