python实现员工信息表增删改查

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python实现员工信息表增删改查相关的知识,希望对你有一定的参考价值。

程序说明:模拟实现sql语句的增删改查
关键是怎么去实现这个事情,从哪儿下手,网上的代码挺多的,这个比较好,最好自己画一个流程图,这样写起来就比较方便,自己写了一遍代码,有问题的可以联系,刚开始学习python,共同学习

实现功能如下

[x] 模糊查询
[x] 创建员工纪录
[x] 删除员工纪录
[x] 修改员工纪录
说下看别人写的代码:自己刚开始也没有思路,慢慢的看一些视频就是一点 一点的完成一个功能模块,
先写一个基础的框架:
技术分享图片

最开始就是写的读文件,因为数据一般都存放在文件或者数据库,所以要先写这个,就用到了with open()处理文件

技术分享图片

这个时候写完了就联系了文件的读及把读取的数据按格式处理,
技术分享图片
玩了就写python的数据对象如何保存到文件,一样也是联系文件的处理,
技术分享图片
这样新增数据就可以实现了
记得写完功能模块一定要先测试
写完代码记得测试:

test_list = "add [Alex Li,22,13651054666,IT,2013-04-01]"
struct_list,data_list = file_to_data("staff_table")
table = "staff_table"
add(test_list,struct_list,data_list,table)

技术分享图片
玩了就写删除模块,一样写完了记得测试

技术分享图片

#!/usr/bin/env python
#_*_coding:utf-8_*_
import os
import sys
def file_to_data(table):
    """
    #把文件转换为python对象
    :param table:
    :return:
    """
    num = 0
    data_list = []
    with open(table,"r+",encoding="utf-8") as f:
        for line in f:
            line = line.strip()
            line_list = line.split(",")
            if num == 0:
                struct_list = line_list
            else:
                data_list.append(line_list)
            num = num + 1
        return  struct_list,data_list
#写完一个功能模块记得可以先测试一下
#struct_list,data_list = file_to_data("staff_table")
#print(struct_list)
#print(data_list)
def auto_increment_id(data_list):
    file = "auto_increment_id"
    max_staff_id = int(data_list[-1][0])  # 表中最大的staff_id
    id = 0  # 初始化
    if os.path.exists(file):  # 自增id文件存在时
        with open(file, "r+") as f:
            for line in f:
                id = int(line)
    if max_staff_id <= id:
        new_staff_id = id + 1
    else:
        new_staff_id = max_staff_id + 1
    with open(file, "w+") as f:
        f.write(str(new_staff_id))
    return new_staff_id
def data_to_file(struct_list, data_list, table):
    with open(table,"w+",encoding="utf-8") as f:
        f.write(",".join(struct_list) + "\n")
        for sub_list in data_list:
            f.write(",".join(sub_list) +"\n")
        print("Done !!!")
def add(sql, struct_list, data_list, table):
    # sql: Alex Li,22,13651054608,IT,2013-04-01
    input_info = sql.strip().strip("add [").strip("]")
    new_list = input_info.split(",")
    phone = new_list[2]
    phone_exist = False
    for d_list in data_list:
        if phone == d_list[3]:
            phone_exist = True
    if phone_exist is True:
        print("The phone is exists ,can‘t Add !!!")
        return True
    else:
        new_staff_id = auto_increment_id(data_list)
        new_list.insert(0,str(new_staff_id))
        data_list.append(new_list)
    data_to_file(struct_list,data_list,table)
#写完代码记得测试
#test_list = "add [Alex Li,22,13651054666,IT,2013-04-01]"
#struct_list,data_list = file_to_data("staff_table")
#table = "staff_table"
#add(test_list,struct_list,data_list,table)
def sql_to_list(sql):
    tmp_sql = sql.split(‘ ‘)
    sql_list = []
    tmp = ‘‘
    flag = 1    #列表添加元素标识
    for l in tmp_sql:
        if l.startswith(‘"‘) and l.endswith(‘"‘):
            flag = 1
        elif l.startswith(‘"‘) and (not l.endswith(‘"‘)):
            flag = 0
            tmp = l + ‘ ‘
        elif (not l.startswith(‘"‘)) and (not l.endswith(‘"‘)):
            if flag == 0:
                l += ‘ ‘
                tmp += l
            else:
                flag = 1
        elif (not l.startswith(‘"‘)) and l.endswith(‘"‘):
            if flag == 0:
                tmp += l
                flag = 1
                sql_list.append(tmp)
                continue

        if flag == 1:
            sql_list.append(l)
    return sql_list
def delete(sql, struct_list, data_list, table):
    delete_flag = False
    input_info = sql_to_list(sql)
    staff_id = input_info[1]
    for d_list in data_list:
        if d_list[0] == staff_id:
            delete_flag = True
            data_list.remove(d_list)
    if delete_flag is not True:
        print("The staff_id is not exist,can‘t delete")
    else:
        data_to_file(struct_list,data_list,table)
#写完代码记得测试
#struct_list,data_list = file_to_data("staff_table")
#table = "staff_table"
#sql="delete 5"
#delete(sql,struct_list,data_list,table)
def check_quotes(str):
    """
    :param str: 需要处理的字符串
    :return: 返回无符号的字符串
    """
    if ‘"‘ in str:
        str = str.strip(‘"‘)
    return str
def print_help():
    print("\tselect * from staff_table;")
    print("\tselect name,age from staff_table where age > 22;")
    print("\tselect * from staff_table where dept = \"IT\";")
    print("\tselect * from staff_table where enroll_date like \"2013\";")
    print("\tadd [Alex Li,22,13651054608,IT,2013-04-01];")
    print("\tupdate staff_table set dept = \"Market\" where dept = \"IT\";")
    print("\tdelete 5;")
def get_column_number(column, struct_list):
    """
    # 获取列位置
    :param column:  列名,此处只实现支持一个
    :return:
    """
    column_number = struct_list.index(column)  # 结果为数字
    return column_number
def input_sql():
    # 获取输入SQL
    exit_flag = False
    while exit_flag is not True:
        print("-".center(60, "-"))
        print("Tip: Input 【help [select/update/add/delete]】 to get help.")
        print("-".center(60, "-"))
        print_help()
        sql = input("Please input SQL:").strip().strip(";")
        if sql.startswith(‘help‘):
            action = sql.split(" ")[1]
            print_help(action)
            continue
        if sql == "q" or sql == "quit":
            exit(" Bye Bye ".center(60, "#"))
        exit_flag = True
    return sql
def check_table(table, c_table):
    """
    # 判断表是否存在
    :param table: 表名
    :return:
    """
    if table != c_table:
        print("Your input table \033[31m{}\033[0m is not exists,"
              "please check!".format(c_table))
        print("#".center(60, "#"))
        return True  # 标记给continue_flagdef check_quotes(str):
def analyze(sql):
    input_info = sql_to_list(sql)
    # return input_info
    action = input_info[0]  # 查:select;增:add;改:update;删:delete
    return action
def select(sql, struct_list, data_list, table):  # select sql语法分析
    input_info = sql_to_list(sql)
    select_column = input_info[1].split(",")
    try:
        table_name = input_info[3]
    except Exception as e:
        print("Your input is error!!!")
        return  True
    continue_flag = check_table(table,table_name)
    if continue_flag is True:
        return True
    all_column = False
    all_line = False
    if "*" in select_column:
        all_column = True
    else:
        column_numbers = []
        print(select_column)
        for s_column in select_column:
            s_number = get_column_number(s_column,struct_list)
            column_numbers.append(s_number)
    if "where" in sql:
        # 由于双引号问题,此处加上双引号
        where_flag = input_info[4]  # where
        condition_column = input_info[5]  # 条件字段
        condition_str = input_info[6]  # 限制条件关键字,支持“=”,“>=”,“like”等
        condition_value = input_info[7]  # 条件参数
        condition_value = check_quotes(condition_value) # 去除双引号
        column_number = get_column_number(condition_column, struct_list)  # 列位置

        match_data_list = []  # 匹配出来的结果,列表格式,
        # 查询行,有like、>=、= 等
        if where_flag == "where":  # 有where
            if condition_str == "like":
                # like
                for line in data_list:  # line也是列表
                    if condition_value in line[column_number]:  # 匹配like
                        match_data_list.append(line)
            elif condition_str == "=":
                for line in data_list:
                    if line[column_number] == condition_value:
                        match_data_list.append(line)
            elif condition_str == ">":
                for line in data_list:
                    if line[column_number] > condition_value:
                        match_data_list.append(line)
            elif condition_str == ">=":
                for line in data_list:
                    if line[column_number] >= condition_value:
                        match_data_list.append(line)
            elif condition_str == "<":
                for line in data_list:
                    if line[column_number] < condition_value:
                        match_data_list.append(line)
            elif condition_str == "<=":
                for line in data_list:
                    if line[column_number] <= condition_value:
                        match_data_list.append(line)
    else:  # 无where,取所有行
        all_line = True
        match_data_list = data_list

    # 打印结果
    print("The select result:")
    print("#".center(60, "#"))
    print("\033[32m{}\033[0m rows in set".format(len(match_data_list)))
    if all_column is True:
        print("{:>8} {:>8} {:>8} {:>8} {:>8} {:>8}".format(*struct_list))
        for line in match_data_list:
            print("{:>8} {:>8} {:>8} {:>8} {:>8} {:>8}".format(*line))
    else:
        len_num = len(select_column)
        format_str = ‘{:>8} ‘ * len_num
        print(format_str.format(*select_column))
        for line in match_data_list:
            line_list = []
            for s in column_numbers:
                line_list.append(line[s])
            print(format_str.format(*line_list))
    print("#".center(60, "#"))
def update(sql, struct_list, data_list, table):
    # update staff_table set dept = "Market" where dept = "IT";   只允许修改age,phone,dept,enroll_date
    input_info = sql_to_list(sql)
    table_name = input_info[1]
    table_name = input_info[1]
    set_flag = input_info[2]
    modify_column = input_info[3]  # 修改的字段
    equal_flag = input_info[4]  # 等于符号
    modify_value = input_info[5]  # 修改后的值
    modify_value = check_quotes(modify_value)  # 去除双引号
    where_flag = input_info[6]
    condition_column = input_info[7]  # 条件字段
    condition_str = input_info[8]  # 限制条件关键字,只支持“=”
    condition_value = input_info[9]  # 条件参数
    condition_value = check_quotes(condition_value)  # 去除双引号
    modify_column_number = get_column_number(modify_column, struct_list)  # 列位置
    condition_column_number = get_column_number(condition_column, struct_list)
    modify_flag = False
    continue_flag = check_table(table, table_name)
    if continue_flag is True:
        return True
    if set_flag == "set" and equal_flag == "=" and where_flag == "where" and condition_str == "=":
        phone_exist = False
        phone = modify_value
        for d_list in data_list:
            if phone == d_list[3]:
                phone_exist = True
        if phone_exist is True:
            print("Thone phone is exist,can‘t update.")
            return True
        for d_list in data_list:
            # 由于双引号问题,此处加上双引号
            if d_list[condition_column_number] == condition_value:
                d_list[modify_column_number] = modify_value
                modify_flag = True
        if modify_flag is not True:
            print("Not match any record!")
        else:
            data_to_file(struct_list, data_list, table)
    else:
        print("Your input is error!")
#写完代码记得测试
#sql = input()
#struct_list,data_list = file_to_data("staff_table")
#table = "staff_table"
#update(sql,struct_list,data_list,table)
def main():
    exit_flag = False
    table = "staff_table"
    while exit_flag is not True:
        sql = input_sql()
        action = analyze(sql)
        struct_list, data_list = file_to_data(table)
        if action == "select":
            continue_flag = select(sql, struct_list, data_list, table)
            if continue_flag is True:
                continue    # 重新循环
        elif action == "add":
            continue_flag = add(sql, struct_list, data_list, table)
            if continue_flag is True:
                continue    # 重新循环
        elif action == "update":
            continue_flag = update(sql, struct_list, data_list, table)
            if continue_flag is True:
                continue
        elif action == "delete":
            delete(sql, struct_list, data_list, table)
        else:
            print("Your input error!")
if __name__ == ‘__main__‘:
    main()

原文链接

以上是关于python实现员工信息表增删改查的主要内容,如果未能解决你的问题,请参考以下文章

Python3练习:对员工信息文件,实现增删改查操作

Python编程 模拟SQL语句 实现对员工信息的增删改查

Python编程 模拟SQL语句 实现对员工信息的增删改查

Python3.5 day4作业:对员工信息文件,实现增删改查操作。

Python程序开发——Python实现可增删改查的员工管理系统

Django单表增删改查-前后端不分离