Python实现简单学生信息管理程序并保存数据至Mysql数据库(附源码)


文章目录

  • Python实现简单学生信息管理程序并保存数据至Mysql数据库(附源码)
  • 前言
  • 成果展示
  • Pymysql用法
  • 源代码


前言

基于上篇文章程序改进而来,之前数据是存在本地文件中,逻辑繁琐且不安全,在我2小时学完pymysql后,将数据保存到数据库中,复杂逻辑交给sql语句去实现

成果展示

可以参考我上一篇文章
Python实现简单学生信息管理程序(附源码)

Pymysql用法

参考大佬的的文章
python3基础:操作mysql数据库

源代码

值得一提的是,这里的连接信息要换成自己数据库的信息,否则会连接超时

python储存个人信息 python保存学生信息_sed

代码如下

import pymysql
from prettytable import PrettyTable
u = PrettyTable(['ID', '姓名', 'Go', 'Python', 'English'])

def menum():
    print('======================学生信息管理系统==========================')
    print('=========================功能菜单=============================')
    print('1、录入学生信息'.center(50))
    print('2、查找学生信息'.center(50))
    print('3、删除学生信息'.center(50))
    print('4、修改学生信息'.center(50))
    print('5、排序'.center(45))
    print('6、统计学生总人数'.center(52))
    print('7、显示所有学生信息'.center(52))
    print('0、退出'.center(45))
    print('==============================================================')


def main():
    while True:
        menum()
        try:
            choice = int(input('请选择[0-7]:'))
            if choice in range(0, 8):
                if choice == 0:
                    answer = input('您确定要退出系统吗?y/n')
                    if answer == 'y' or answer == 'Y':
                        print('欢迎下次使用!')
                        break
                    else:
                        print('下次摁错就揍你!')
                        time.sleep(1)
                        continue
                elif choice == 1:
                    insert_data()
                elif choice == 2:
                    search()
                elif choice == 3:
                    delete()
                elif choice == 4:
                    modify()
                elif choice == 5:
                    sort()
                elif choice == 6:
                    total()
                elif choice == 7:
                    show()
        except Exception as e:
            print('错误类型是', e.__class__.__name__)
            print('错误明细是', e)
            print('您输入的命令格式有误,请重新输入')
            continue


def insert_data():
    insert = "insert into t_student values (%s,%s,%s,%s,%s);"
    while True:
        opendb()
        name = input("请输入学生姓名:")
        if not name:
            print('您输入的姓名为空,请重新输入')
            continue
        try:
            id = int(input("请输入学生ID:"))
            golang = int(input("Go语言成绩是:"))
            python = int(input('python语言成绩是:'))
            english = int(input('英语成绩是:'))
            try:
                cur.execute(insert, (id, name, golang, python, english))
                print(f'{name}信息添加成功')
                closedb()
                show()
                answer = input("是否继续添加学生信息?y/n")
                if answer == 'y' or answer == 'Y':
                    opendb()
                    continue
                else:
                    break
            except Exception as e:
                print('错误类型是', e.__class__.__name__)
                print('错误明细是', e)
                print("数据库插入错误,检查")
                break
            finally:
                closedb()
        except ValueError as e:
            print('错误类型是', e.__class__.__name__)
            print('错误明细是', e)
            print('请输入有效的整数,重新输入')
            continue
        except pymysql.err.IntegrityError:
            print('您输入的ID重复,请重新输入')
            continue


def search():
    while True:
        try:
            stu_id = int(input("请输入要查询的ID:"))
            if stu_id:
                opendb()
                searchsql = f"select * from t_student where id = {stu_id}"
                result = cur.execute(searchsql)
                if result == 0:
                    print("未找到该编号学生信息信息,请重新输入")
                    continue
                else:
                    resTuple = cur.fetchone()
                    u.add_row([resTuple[0], resTuple[1], resTuple[2], resTuple[3], resTuple[4]])
                    print(u)
                    u.clear_rows()
            else:
                print("您输入的ID为空,请重新输入")
                continue
        except Exception as e:
            print('错误类型是', e.__class__.__name__)
            print('错误明细是', e)
            print("您输入的ID有误,请重新输入")
            break

        finally:
            closedb()
def total():
    opendb()
    totalsql="select count(*) from t_student"
    cur.execute(totalsql)
    print(f'当前共录入:{cur.fetchone()[0]}人')

def show():
    d = {}
    opendb()
    cur.execute("select * from t_student;")
    resTuple = cur.fetchall()
    for res in resTuple:
        u.add_row([res[0], res[1], res[2], res[3], res[4]])
    print(u)
    u.clear_rows()
    closedb()


def delete():
    show()
    try:
        tag = True
        while True:
            stu_id = int(input("请输入要删除的ID(ID为0时退出):"))
            opendb()
            if tag:
                answer = input(f'您确定要删除ID={stu_id}这条信息吗?(y/n)')
                if answer == 'y' or answer == 'Y':
                    deletesql = f"delete from t_student where id = {stu_id};"
                    num = cur.execute(deletesql)
                    conn.commit()
                    print(f'您已成功删除{num}条数据')
                    show()
                else:
                    break
            else:
                deletesql = f"delete from t_student where id = {stu_id};"
                num = cur.execute(deletesql)
                conn.commit()
                print(f'您已成功删除{num}条数据')
                show()
            answer = input('您是否要继续删除其他信息?(y/n)')
            if answer == 'y' or answer == 'Y':
                tag = False
                continue
            else:
                break
    except:
        print('您输入的格式不正确请重新输入')
    finally:
        closedb()


def modify():
    show()
    try:
        stu_id = int(input("请输入要修改的ID"))
        opendb()
        while True:
            try:
                golang = int(input("Golang成绩:"))
                python = int(input("Python成绩:"))
                english = int(input("英语成绩:"))
                update = f"update t_student set golang={golang},python = {python},english = {english} where id = {stu_id};"
                print(update)
                cur.execute(update)
            except:
                print("您输入成绩有误,请重新输入!")
                continue
            finally:
                closedb()
                show()
                break
    except Exception as e:
        print('错误类型是', e.__class__.__name__)
        print('错误明细是', e)
        print('您输入的格式不正确请重新输入')


def sort():
    show()
    opendb()
    try:
        while True:
            answer = int(input("请选择降序或者升序(1:降序2:升序0:退出)"))
            if answer == 1:
                sc = 'desc'
            elif answer == 2:
                sc = 'asc'
            elif answer == 0:
                break
            else:
                print('您输入的格式有误,请重新输入')
                continue
            answer = input('请选择根据哪门成绩排序?(1:golang,2:python;3:english)')
            if answer == '1':
                subject = 'golang'
            elif answer == '2':
                subject = 'python'
            elif answer == '3':
                subject = 'english'
            else:
                print('您输入的格式有误,请重新输入')
                continue
            sortsql = f"select * from t_student order by {subject} {sc}"
            cur.execute(sortsql)
            resTuple = cur.fetchall()
            for res in resTuple:
                print(res)
                u.add_row([res[0], res[1], res[2], res[3], res[4]])
            print(u)
            u.clear_rows()
            answer = input('您是否要继续排序其他信息?(y/n)')
            if answer == 'y' or answer == 'Y':
                continue
            else:
                break


    except Exception as e:
        print('错误类型是', e.__class__.__name__)
        print('错误明细是', e)
        print('您输入的格式不正确请重新输入')
    finally:
        closedb()


def opendb():
    global cur, conn
    conn = pymysql.connect(host="101.42.222.161", user='root', passwd='1qaz@WSX', port=32306)
    conn.select_db('Student')
    cur = conn.cursor()


def closedb():
    cur.close()
    conn.commit()
    conn.close()


def create_mysql_env():
    opendb()
    cur.execute('create database if not exists Student default charset utf8 collate  utf8_general_ci;')
    create_table = """Create table if not exists `t_student` (`id` int(11) not null,`name` varchar(10) not null ,`golang` int(11) not null ,`python` int(11),`english` int(11),primary key (`id`))default  character  set 'utf8';"""
    cur.execute(create_table)
    closedb()

create_mysql_env()
if __name__ == '__main__':
    main()