#作业名称:员工信息的增删改查 #作业需求:
1.可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 select * from staff_table where dept = "IT" select * from staff_table where enroll_date like "2013" 查到的信息,打印后,最后面还要显示查到的条数 2.可创建新员工纪录,以phone做唯一键,staff_id需自增 3.可删除指定员工信息纪录,输入员工id,即可删除 4.可修改员工信息,语法如下: UPDATE staff_table SET dept="Market" WHERE where dept = "IT"
#本次完成作业需求:用sql语句实现增删改查
代码如下:
#! /usr/bin/env python# -*- coding: utf-8 -*-# __author__ = "Q1mi"# Date: 2017/9/19import re,json# d={"1":{"name":"alex","age":‘22‘,‘phone‘:‘13651054608‘,"dept":"运维","enroll_data":"2013-04-01"}}# json.dump(d,sort_keys=True) #Json存储def store(data): with open(‘information.txt‘, ‘w‘) as json_file: json_file.write(json.dumps(data)) #Json加载def load(): with open(‘information.txt‘) as json_file: data = json.load(json_file) return data#判断phone是否重复def phone_repete(info1,info2): for item in info1: info1[item]["phone"]==info2["phone"] return True return False #将符合要求的查询结果转化为字符串#{‘1‘: {‘name‘: ‘Mark‘, ‘age‘: ‘22‘, ‘phone‘: ‘13651054608‘, ‘dept‘: ‘IT‘, ‘enroll_data‘: ‘2013-04-01‘}}def get_final_result(show_item,show_list): if len(show_list)==0: return("没有符合条件的结果") show_final_list=[] show_final="" for item2 in show_list: for i in show_item: if i =="staff_id": show_final_list.append(item2) else: show_final_list.append(show_list[item2][i]) show_final_list.append("\n") show_final=",".join(show_final_list) return show_final#查询def fetch(data): #需要展示的项,如staff_id等 show_item=[] #筛选的初步结果,字典形式 show_list={} all_item=["staff_id","name","age","phone","dept","enroll_date"] data1=data.split(" ")#[‘select‘, ‘*‘, ‘from‘, ‘staff_table‘, ‘where‘, ‘dept‘, ‘=‘, ‘"IT"‘] #判断是否是select语句 if data1[0]!="select": return("此语句不是select语句") #检索查询项及校验 if data1[1]=="*": show_item=all_item else: show_item=data1[1].split(",") for item in show_item: if item not in ["staff_id","name","age","phone","dept","enroll_date"]: return("输入的查询项%s有误" %item) #校验查询的表是否正确 if re.findall(r"from (.+?) where",data)[0]!="staff_table": return("查询的表不存在") #where条件 df=data1[-3].strip() if df not in all_item or data1[-2] not in [">","=","like"]: return("查询语句中的where条件输入有误") #读取Json文件中的原始数据 initial_data=load()#{‘1‘: {‘name‘: ‘Mark‘, ‘age‘: ‘22‘, ‘phone‘: ‘13651054608‘, ‘dept‘: ‘IT‘, ‘enroll_date‘: ‘2013-04-01‘}} condition=data1[-3] symbol=data1[-2] if condition=="staff_id": if symbol==">": for item in initial_data: if item > int(data1[-1]): show_list[item] = initial_data[item] if symbol=="=": for item in initial_data: if item > int(data1[-1]): show_list[item] = initial_data[item] return get_final_result(show_item,show_list) if condition=="age": if symbol==">": for item in initial_data: if int(initial_data[item]["age"])>int(data1[-1]): show_list[item]=initial_data[item] if symbol=="=": for item in initial_data: if initial_data[item]["age"]==int(data1[-1]): show_list[item]=initial_data[item] return get_final_result(show_item,show_list) if condition in ["name","phone","dept","enroll_date"]: if symbol=="like": for item in initial_data: r=re.findall(r"%s(.+?)" %data1[-1].strip().strip(‘"‘),initial_data[item][condition]) if len(r)!=0: show_list[item]=initial_data[item] if symbol=="=": for item in initial_data: if initial_data[item][condition]==data1[-1].strip("\\\""): show_list[item]=initial_data[item] return get_final_result(show_item,show_list) #判断添加sqldef judge_add_sql(statements): #insert into staff_table values (‘name‘,‘age‘,‘phone‘,‘dept‘,‘enroll_date‘) #截取输入的值 r=re.findall(r"insert into staff_table values (.+)",statements)[0].strip("(").strip(")").replace("‘",‘‘).replace(‘"‘,"") r=r.split(",") #没有截取到内容时 if r==None or len(r)!=5: return False else: return("{‘name‘:‘%s‘,‘age‘:‘%s‘,‘phone‘:‘%s‘,‘dept‘:‘%s‘,‘enroll_date‘:‘%s‘}" %(r[0],r[1],r[2],r[3],r[4])) #判断修改sqldef judge_update_sql(statements): #UPDATE staff_table SET dept="Market" WHERE dept = "IT" change= re.findall(r"UPDATE staff_table SET (.+) WHERE *",statements) condition = re.findall(r"UPDATE staff_table SET %s WHERE (.+)" %change[0], statements) change = change[0].split("=") condition=condition[0].split("=") if change[0] and change[1] and condition[0] and condition[1]: r=[change,condition] return r else: return False #添加def add(data): #检索输入语句是否正确 judgment=judge_add_sql(data) if judgment==False: return ("输入的语句有误") else: judgment=eval(judgment) #判断phone是否重复 old_file=load() k_max=1 for k in old_file: #获取序号的最大值 if k_max<int(k): k_max=int(k) if old_file[k][‘phone‘]==judgment[‘phone‘]: return(‘phone已存在‘) k_new=k_max+1 old_file[str(k_new)]=judgment store(old_file) return("添加成功")#修改def updata(data): #UPDATE staff_table SET dept="Market" WHERE dept = "IT" flag = False r=judge_update_sql(data) old_file=load() # print(old_file) for k in old_file: f = r[1][0].strip(" ") if old_file[k][f]==r[1][1].strip().strip("‘").strip(‘"‘): flag=True old_file[k][r[0][0]] = r[0][1].strip().strip("‘").strip(‘"‘) store(old_file) if flag: return("修改成功") else: return("输入有误") #删除def delete(data): old_file=load() for k in old_file: if k==data: old_file.pop(data) store(old_file) return("删除成功") return("未找到对应数据") # if __main__==__name__:while True: print(‘‘‘======================== 欢迎来到员工信息系统 ------------------------ 1、查询 2、添加 3、修改 4、删除 5、退出 ‘‘‘) choice=input("请输入功能选项:") # info="select name,age from staff_table where age > 22" if choice.isdigit(): choice=int(choice) if choice in [1,2,3,4]: data = input("请输入语句:") if choice==1: print(fetch(data)) if choice == 2: print(add(data)) if choice == 3: print(updata(data)) if choice == 4: print(delete(data)) continue if choice==5: print("欢迎下次再来!") break print("输入的数字有误,请重新输入!") else: print("输入有误,请重新输入!")
时间: 2024-11-05 18:36:04