python练习员工信息增删改查程序
Posted q1ang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python练习员工信息增删改查程序相关的知识,希望对你有一定的参考价值。
员工信息增删改查程序
功能:
可进行模糊查询
find name,age from staff_table where age > 22 find name from staff_table where dept = "IT" find name from staff_table where id=4 find age from staff_table where name = "Alex Li" find * from staff_table where name = "Alex Li" find name,age,phone from staff_table where enroll_date like "2013-04-01"
可创建新员工纪录,以phone做唯一键(即不允许表里有手机号重复的情况),sta?_id自增
add staff_table Alex Li,25,134435344,IT,2015-10-29
可删除指定员工信息纪录,输入员工id,即可删除
del from staff_table where id=4 del from staff_table where age>22
可修改员工信息
UPDATE staff_table SET dept="Market" WHERE dept = "IT" UPDATE staff_table SET age=25 WHERE name = "Alex Li"
以上每条语名执行完毕后,显示这条语句影响了多少条纪录。 比如查询语句 显示 查询出了多少条、 修改语句显示修改了多少条等。
表格形式如下:
id | name | age | phone | dept | enroll_date |
---|---|---|---|---|---|
1 | Alex Li | 22 | 13651054608 | IT | 2013-04-01 |
2 | Jack Wang | 28 | 13451024608 | HR | 2015-01-07 |
3 | Rain Wang | 21 | 13451054608 | IT | 2017-04-01 |
文件存储方式如下:
1,Alex Li,22,13651054608,IT,2013-04-01
2,Jack Wang,28,13451024608,HR,2015-01-07
3,Rain Wang,21,13451054608,IT,2017-04-01
4,Mack Qiao,44,15653354208,Sales,2016-02-01
5,Rachel Chen,23,13351024606,IT,2013-03-16
6,Eric Liu,19,18531054602,Marketing,2012-12-01
7,Chao Zhang,21,13235324334,Administration,2011-08-08
8,Kevin Chen,22,13151054603,Sales,2013-04-01
9,Shit Wen,20,13351024602,IT,2017-07-03
10,Shanshan Du,26,13698424612,Operation,2017-07-02
代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
import os
data = {} # 存放表格数据
tables = ‘‘
match = { # 表头对应关系
‘id‘: 0,
‘name‘: 1,
‘age‘: 2,
‘phone‘: 3,
‘dept‘: 4,
‘enroll_date‘: 5
}
‘‘‘
测试语句:
find name,age from staff_table where age > 22
find name from staff_table where dept = "IT"
find name from staff_table where id=4
find age from staff_table where name = "Alex Li"
find * from staff_table where name = "Alex Li"
find name,age,phone from staff_table where enroll_date like "2013-04-01"
find name,age,phone,enroll_date from staff_table where enroll_date like "2013"
add staff_table Alex Li,25,134435344,IT,2015-10-29
del from staff_table where id=4
del from staff_table where age>22
UPDATE staff_table SET dept="Market" WHERE dept = "IT"
UPDATE staff_table SET age=25 WHERE name = "Alex Li"
‘‘‘
def main():
‘‘‘
主程序
projects:需要输出的内容
tables:本次操作的表格(文件名)
rule:数据筛选的条件
:return:
‘‘‘
while True:
global tables
global data
tables = ‘‘
data = {
‘id‘: [],
‘name‘: [],
‘age‘: [],
‘phone‘: [],
‘dept‘: [],
‘enroll_date‘: []
}
inputs = input(‘>>>‘).strip()
handle = inputs.split(‘ ‘)[0]
if handle == ‘find‘:
inputs_list = inputs.split(‘ from ‘)
projects = inputs_list[0].split(‘ ‘)[1].split(‘,‘) # 打印内容
inputs_list1 = inputs_list[1].split(‘ where ‘)
tables = inputs_list1[0] # 表格
rule = inputs_list1[1].replace(‘=‘, ‘==‘)
db_open()
prints(projects,find(rule))
elif handle == ‘add‘:
inputs_list = inputs.split(‘ ‘, 2)
tables = inputs_list[1]
db_open()
add(inputs_list)
elif handle == ‘del‘:
inputs_list = inputs.split(‘ from ‘)[1].split(‘ where ‘)
tables = inputs_list[0]
rule = inputs_list[1].replace(‘=‘, ‘==‘)
db_open()
delete(find(rule))
elif handle == ‘UPDATE‘:
inputs_list = inputs.split(‘ SET ‘)
tables = inputs.split(‘ ‘)[1]
updates = inputs_list[1].split(‘ WHERE ‘)[0].replace(‘=‘, ‘==‘)
rule = inputs_list[1].split(‘ WHERE ‘)[1].replace(‘=‘, ‘==‘)
print(tables)
db_open()
update(find(rule),updates)
else:
print(‘ 33[0;33mPlease input:
‘
‘find [id,name,...] from [table] where [id,name,...][><=like][id,name,...]
‘
‘add [table] [name,age,...]
‘
‘del from [table] [id,name,...] where [id,name,...][><=like][id,name,...]
‘
‘UPDATE [table] set [id,name,...] = [id,name,...] WHERE [id,name,...][><=like][id,name,...] 33[0m ‘)
continue
def db_loads(loads):
‘‘‘
将数据载入data字典,data字典用于存放表格数据
:param loads: 文件读取的每一行内容
:return:
‘‘‘
if loads:
staff_id,name,age,phone,dept,enroll_date=loads.strip().split(‘,‘)
# print(staff_id,name,age,phone,dept,enroll_date)
data[‘id‘].append(int(staff_id))
data[‘name‘].append(name)
data[‘age‘].append(int(age))
data[‘phone‘].append(int(phone))
data[‘dept‘].append(dept)
data[‘enroll_date‘].append(enroll_date)
def db_open():
‘‘‘
打开文件,读取内容,调用db_loads(loads)
:return:
‘‘‘
with open(tables,‘r‘,encoding=‘utf-8‘) as f:
for line in f:
db_loads(line.strip())
def db_save_a(data):
‘‘‘
文件追加写入
:param data:
:return:
‘‘‘
with open(tables,‘a‘,encoding=‘utf-8‘) as f:
f.write(data)
print(‘ 33[0;33mdata has been saved ... 33[0m‘)
def find(rule):
‘‘‘
查找符合条件的id
:param rule: 数据筛选的条件
:return: 列表形式的id
‘‘‘
id = []
if ‘like‘ in rule:
key = rule.split(‘ ‘)
cmd = "%s in item"%(key[-1])
else:
key = re.findall(‘w+‘, rule)
cmd = rule.replace(key[0], ‘item‘)
for index,item in enumerate(data[key[0]]):
exec(‘‘‘if %s:
id.append(index)
‘‘‘%cmd)
print(‘ 33[0;33mFind %s pieces of information ... 33[0m‘%len(id))
return id
def add(inputs_list):
‘‘‘
数据增加操作,分别调用db_save_a追加内容,db_loads加载新数据至data字典
:param inputs_list:要增加的数据
:return:
‘‘‘
if int(inputs_list[2].split(‘,‘)[2]) in data[‘phone‘]:
print(‘ 33[0;33mThe phone number is the same as the others... 33[0m‘)
else:
add_data = str(len(data[‘id‘])+1)+‘,‘+inputs_list[2]+‘
‘
db_save_a(add_data)
db_loads(add_data)
def delete(lists):
‘‘‘
删除操作
:param lists: 要删除的数据
:return:
‘‘‘
with open(tables, ‘r+‘, encoding=‘utf-8‘) as f, open(‘data_new.txt‘, ‘w‘) as f2:
i,j = 1,1
for line in f:
if int(line.split(‘,‘)[0]) not in list(map(lambda x:x+1,lists)):
line = line.replace(str(j), str(i), 1)
f2.write(line)
i += 1
j += 1
os.remove(tables)
os.rename(‘data_new.txt‘,tables)
print(‘ 33[0;33m...
delete success ! 33[0m‘)
def update(lists,updates):
‘‘‘
数据更改操作
:param lists: 筛选出的数据id列表
:param updates: 需要更新的数据
:return:
‘‘‘
key = re.findall(‘w+‘,updates)
with open(tables, ‘r+‘, encoding=‘utf-8‘) as f, open(‘data_new.txt‘, ‘w‘) as f2:
for line in f:
if int(line.split(‘,‘)[0]) in list(map(lambda x: x + 1, lists)):
tem = line.split(‘,‘)
tem[match[key[0]]] = key[1]
line = ‘,‘.join(tem)
f2.write(line)
os.remove(tables)
os.rename(‘data_new.txt‘, tables)
print(‘ 33[0;33m%s changes ... 33[0m‘%len(lists))
def prints(projects,data_num):
‘‘‘
内容输出打印模块
:param projects: 需要打印的内容
:param data_num: 数据的id列表
:return:
‘‘‘
tem = ‘‘
tem1 = ‘‘
if ‘*‘ in projects:
projects = data.keys()
for i in projects:
tem1 += "‘%s‘.center(11,‘ ‘),‘|‘,"%i
tem += "str(data[‘%s‘][j]).center(11,‘ ‘),‘|‘," %i
eval("print(" + tem1 + ")")
for j in data_num:
print(‘- - - - - - -‘.center(14, ‘ ‘)*len(projects))
eval("print(" + tem + ")")
if __name__ == ‘__main__‘:
main()
以上是关于python练习员工信息增删改查程序的主要内容,如果未能解决你的问题,请参考以下文章