要求:使用python连接mysql数据库,用pymysql第三方库实现对学生信息的增删查改功能。学生信息应该包含:学号、姓名、性别、班级、电话、年龄、出生日期。

使用模块:


pymysql datetime re


运行效果截图:

Python增加学生信息 python学生信息表_mysql

从截图中,可以看到,难点是需要根据时间来判断年龄

实现步骤:应该设计一张数据库的学生表,表包含如上要求的信息,创建数据库后,生成该表:

Python增加学生信息 python学生信息表_python_02

菜单功能选择函数:

def mainstu():
    while True:
        # 输出初始界面
        print("=" * 12, "学生信息管理系统", "=" * 15)
        print("{0:2}{1:13}{2:15}".format(" ", "1.查看学员信息", "2.添加学员信息"))
        print("{0:2}{1:13}{2:15}".format(" ", "3.修改学员信息", "4.删除学员信息"))
        print("{0:2}{1:13}".format(" ", "5.退出系统"))
        print("=" * 45)
        key = int(input("请输入对应的选择:\n"))
        # 根据键盘值判断并进行操作
        if key == 1:
            print("=" * 12, "学员信息浏览", "=" * 15)
            seesql()
            input("按回车继续")
        elif key == 2:
            print("=" * 12, "学员信息添加", "=" * 15)
            addmql()
            input("按回车继续")
        elif key == 3:
            print("=" * 12, "学员信息修改", "=" * 15)
            seesql()
            updatasql()
            input("按回车继续")
        elif key == 4:
            print("=" * 12, "学员信息删除", "=" * 15)
            seesql()
            delsql()
            input("按回车继续")
        elif key == 5:
            print("=" * 12, "再见", "=" * 12)
            quit()
        else:
            print("=" * 12, "您的输入有误,请重新输入", "=" * 12)


mainstu()

 查询所有学生:

def seesql():
    # 查看学生表数据库
    db = pymysql.connect(host="localhost", user="root", password="123456", db="stu", charset="utf8")
    # 创建游标对象
    cursor = db.cursor()
    sql = "select s.sno,s.name,s.sex,s.cla,s.tel,s.birthday from stu s order by sno"
    # 用sno(学号)排序查看学生名单
    try:
        m = cursor.execute(sql)
        alist = cursor.fetchall()
        print("{:>3}|\t{:<4}\t|{}|\t{:<3}\t\t| {:<8}|{}| {}".format("学号", "姓名", "性别", "班级", "电话", "年龄", "出生日期"))
        for vo in alist:
            birth = vo[5]
            bir = birth.strftime("%Y-%m-%d")
            if bir == "1949-10-01":
                bir = "NULL"
            print(
                "{:>5}|\t{:<4}\t| {} |\t{:<10}\t|{:<11}| {} | {}".format(vo[0], vo[1], vo[2], vo[3], vo[4], CalAge(bir),
                                                                         bir))
        db.commit()
    except Exception as err:
        db.rollback()
        print("SQL查看失败!错误:", err)
    db.close()

修改出生年份,自动计算年龄:

Python增加学生信息 python学生信息表_Python增加学生信息_03

 代码实现:

elif a == 5:
            birday = input("请输入修改后的出生日期(格式:2000-1-1):")
            if re.search(r"(\d{4}-\d{1,2}-\d{1,2})", birday):
                '''正则表达式匹配判断输入是否合格'''
                birday = birday
            else:
                birday = "1949-10-01"
                print("出生日期输入错误,已重置为初始值")
            sql = "UPDATE stu s SET s.birthday = '%s' WHERE s.sno = '%d'" % (birday, stuid)
        else:
            print("您的输入有误,将会退出!")  # 此处退出防止某些误操作导致的数据库数据泄露
            quit()
        cursor.execute(sql)
        db.commit()
        print("修改后的该学员信息为:")
        seeone(stuid)
    except Exception as err:
        db.rollback()
        print("SQL修改失败!错误:", err)
    db.close()
def CalAge(Date):
    # 生日(年月日(数据库中的))转换为年龄
    if Date == "NULL":
        return "无"
    try:
        Date = Date.split('-')
        Birth = datetime.date(int(Date[0]), int(Date[1]), int(Date[2]))
        Today = datetime.date.today()
        if (Today.month > Birth.month):
            NextYear = datetime.date(Today.year + 1, Birth.month, Birth.day)
        elif (Today.month < Birth.month):
            NextYear = datetime.date(Today.year, Today.month + (Birth.month - Today.month), Birth.day)
        elif (Today.month == Birth.month):
            if (Today.day > Birth.day):
                date = datetime.date(Today.year + 1, Birth.month, Birth.day)
            elif (Today.day < Birth.day):
                NextYear = datetime.date(Today.year, Birth.month, Today.day + (Birth.day - Today.day))
            elif (Today.day == Birth.day):
                NextYear = 0
        Age = Today.year - Birth.year
        if NextYear == 0:  # 如果今天就是生日
            return "%d" % (Age)
        else:
            DaysLeft = NextYear - Today
            return "%d" % (Age)
    except:
        return "错误"

删除学生:

Python增加学生信息 python学生信息表_Python增加学生信息_04

 14号学生不存在:

Python增加学生信息 python学生信息表_Python增加学生信息_05

 实现代码:

def delsql():
    # 删除某条学生数据
    db = pymysql.connect(host="localhost", user="root", password="123456", db="stu", charset="utf8")
    # 创建游标对象
    cursor = db.cursor()
    stuid = int(input("请输入要删除的学员的学号:\n"))  # 一个班不超过100人,以stuid作为索引
    try:
        print("======即将删除的学员信息的名称======")
        seeone(stuid)
        a = input("请确认是否删除该学员信息(y/n):\n")
        if a == 'y' or a == 'Y':
            sql = "delete from stu where sno = '%d'" % (stuid)
            cursor.execute(sql)
        else:
            print("取消学员信息删除,即将退出系统")
            quit()
        db.commit()
        print("该学员信息已删除")
    except Exception as err:
        db.rollback()
        print("SQL删除失败!错误:", err)
    db.close()