python基于MySQl,实现简单的学生成绩管理操作,了解并搭建mysql,练习简单的sql语句

首先安装MySQL:windows下安装mysql教程

使用SQL语句连接本地(或远程)MySQL数据库服务器,并创建stu数据库
在stu数据库中创建如下4张数据表 :
1)student表:字段有:SID,SName,Grade 分别表示学号、姓名、年级;其中,学号为主键
2)course表:字段有:CID,CName,hours,credit 分别表示课程号、课程名、学时、学分;其中,课程号为主键
3)score表:字段有:SID,CID,score 分别表示学号、课程号、成绩;其中,学号和课程号作联合主键
4)teacher表:字段有:TID,TName,Tmajor 分别表示教师工号、教师姓名、教师专业;其中,教师工号为主键
5)job表:字段有:TID,CID,semester 分别表示教师工号、课程号、上课学年
具备简单的交互式功能:
1)录入信息:学生信息、课程、成绩、教师、教师任课信息
2)查询信息:返回某一个学生的基本学籍信息,包括:学号、姓名、课程名、任课教师、上课学年、成绩
3)修改信息:修改学生基本信息、课程基本信息、成绩信息、教师信息、教师任课信息
4)删除信息:删除学生、课程、成绩、教师、教师任课记录等,注意: 成绩表与学生表、课程表存在约束;任课信息表与教师表、课程表存在约束

import pymysql
#  sql = "select student.SID,student.SName, from student,course,score,teacher,job" where student.SID=score.SID and course.CID=score.CID

#创建数据库
def database_creat(db_name):
    con = pymysql.connect(host='localhost',user = "root",passwd = "123456",port=3306)
    #获取游标
    cur=con.cursor()
    #创建数据库
    cur.execute('CREATE DATABASE IF NOT EXISTS {name} DEFAULT CHARSET utf8 COLLATE utf8_general_ci;'.format(name = db_name))
    cur.close()#先关闭游标
    con.close()#再关闭数据库连接
    print('创建{}数据库成功'.format(db_name))

#创建表
def table_creat(cur,table_name):
    if table_name=='student':
        sql="""CREATE TABLE IF NOT EXISTS {} (
            SID  varchar(20) NOT NULL ,
            SName varchar(20) NOT NULL,
            Grade  varchar(20) NOT NULL,
            primary key (SID)
          ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0""".format(table_name)
        cur.execute(sql)
       
    elif table_name=='course':
        sql="""CREATE TABLE IF NOT EXISTS {} (
            CID  varchar(20) NOT NULL ,
            CName varchar(20) NOT NULL,
            hours  int,
            credit int,
            primary key (CID)
          ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0""".format(table_name)
        cur.execute(sql)     

    elif table_name=='score':
        sql="""CREATE TABLE IF NOT EXISTS {} (
            SID  varchar(20) NOT NULL,
            CID  varchar(20) NOT NULL,
            score  int,
            primary key (SID,CID),
            foreign key(SID) references student(SID),
            foreign key(CID) references course(CID)
          ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0""".format(table_name)
        cur.execute(sql)

    elif table_name=='teacher':
        sql="""CREATE TABLE IF NOT EXISTS {} (
            TID  varchar(20) NOT NULL ,
            TName  varchar(20) NOT NULL,
            Tmajor  varchar(20) NOT NULL,
            primary key (TID)
          ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0""".format(table_name)
        cur.execute(sql)
       
    
    elif table_name=='job':
        sql="""CREATE TABLE IF NOT EXISTS {} (
            TID  varchar(20) NOT NULL ,
            CID varchar(20) NOT NULL,
            semester varchar(20) NOT NULL,
            foreign key(TID) references teacher(TID),
            foreign key(CID) references course(CID)
          ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0""".format(table_name)
        cur.execute(sql)
    
    print('创建{}表成功'.format(table_name))


 #录入信息
def insert_info(con,cur,table_name,lis):
    if table_name=='course':
        sql="""insert into %s values('%s','%s','%s','%s')"""%(table_name,lis[0],lis[1],int(lis[2]),int(lis[3]))
    elif table_name=='score':
        sql="insert into %s values('%s','%s','%s')"%( table_name,lis[0],lis[1],int(lis[2]))
    else:
        sql="""insert into %s values('%s','%s','%s')"""%( table_name,lis[0],lis[1],lis[2])    
    cur.execute(sql)
    con.commit()
    print('{}表输入记录成功'.format(table_name))
    print('*********'*14)
    
#查询学生信息
# 返回某一个学生的基本学籍信息,包括:学号、姓名、课程名、任课教师、上课学年、成绩
def view_info(con,cur):
    print('信息如下:(包括:学号、姓名、课程名、任课教师、上课学年、成绩)')
    sql = '''select score.SID,student.SName,course.CName,teacher.TName,job.semester,score.score from student,course,score,teacher,job 
          where student.SID=score.SID and course.CID=score.CID '''
# student表:字段有:SID,SName,Grade 分别表示学号、姓名、年级;其中,学号为主键
# 2)course表:字段有:CID,CName,hours,credit 分别表示课程号、课程名、学时、学分;其中,课程号为主键
# 3)score表:字段有:SID,CID,score 分别表示学号、课程号、成绩;其中,学号和课程号作联合主键
# 4)teacher表:字段有:TID,TName,Tmajor 分别表示教师工号、教师姓名、教师专业;其中,教师工号为主键
# 5)job表:字段有:TID,CID,semester 分别表示教师工号、课程号、上课学年
    cur.execute(sql)
#     for info in cur.execute(sql):
#         print(info)
#     for stu in cur.execute("select * from student"):
#         print(stu)
    print(cur.fetchall())
    print('*********'*14)
    

 #简单修改信息(主键之外信息)
def modify_info(con,cur,table_name,lis):
    
    #字符出串加''号
    if table_name=='student':
        update_sql = "update %s set SName= '%s' where SID= '%s' "%( table_name,lis[1],lis[0])
        cur.execute(update_sql)
        
        
        con.commit()
        update_sql = "update %s set Grade= '%s' where SID= '%s' "%( table_name,lis[2],lis[0])
        cur.execute(update_sql)
        con.commit()
#         data ={"Sname":lis[1], "Grade":lis[2],"SID":lis[0]}
    elif table_name=='course':
        update_sql = "update %s set CName= '%s',hours=%s,credit=%s where CID= %s"%( table_name,lis[1],lis[2],lis[3],lis[0])
        cur.execute(update_sql)
#         data ={"CName":lis[1], "hours":int(lis[2]), "credit":int(lis[3]),"CID":lis[0]}
       
    elif table_name=='score':
        update_sql = "update %s set score= %s where SID= '%s' and CID= %s"%( table_name,lis[2],lis[0],lis[1])
        cur.execute(update_sql) 
#         data ={"score":lis[2], "SID":lis[0],"CID":lis[1]}

    elif table_name=='teacher':
        update_sql = "update %s set TName= '%s' ,Tmajor = '%s' where TID= '%s'"%( table_name,lis[1],lis[2],lis[0])
        cur.execute(update_sql)  
#         data ={"TName":lis[1],"Tmajor":lis[2], "TID":lis[0]}
        
    elif table_name=='job':
        update_sql = "update %s set semester= '%s' where TID= '%s' and CID= '%s' "%( table_name,lis[2],lis[0],lis[1])
        cur.execute(update_sql) 
#         data ={'semester':lis[2], 'TID':lis[0],'CID':lis[1]}
        
   
    con.commit()
    print('{}表修改记录成功'.format(table_name))
    print('*********'*14)

    
#查看表
def view_table(cur,table_name):
    print("%s表信息如下:"%(table_name))
    cur.execute("select * from %s"%(table_name))   
    print(cur.fetchall())
    print('*********'*14)

                
 #删除记录
def delete_info(con,cur,table_name):
    
    #字符出串加''号
    if table_name=='student':
        print("输入学号:",end='')
        a=input()
        
        delete_sql ="delete from score where SID= '%s' "%(a)
        cur.execute(delete_sql)        
        delete_sql ="delete from %s where SID= '%s' "%( table_name,a)
        cur.execute(delete_sql)
                
    elif table_name=='course':
        print("输入课程号:",end='')
        a=input()
        delete_sql ="delete from job where SID= '%s' "%(a)
        cur.execute(delete_sql) 
        delete_sql ="delete from score where SID= '%s' "%(a)
        cur.execute(delete_sql)        
        delete_sql ="delete from %s where SID= '%s' "%( table_name,a)
        cur.execute(delete_sql)

       
    elif table_name=='score':
        print("输入学号 课程号:",end='')
        a,b=input().split(' ')
        delete_sql ="delete from score where SID= '%s' and CID='%s' "%(a,b)
        cur.execute(delete_sql) 


    elif table_name=='teacher':
        print("输入教师工号:",end='')
        a=input()
        delete_sql ="delete from job where SID= '%s' "%(a)
        cur.execute(delete_sql)        
        delete_sql ="delete from %s where SID= '%s' "%( table_name,a)
        cur.execute(delete_sql) 
#
        
    elif table_name=='job':
        print("输入教师工号 课程号:",end='')
        a,b=input().split(' ')
        delete_sql ="delete from job where TID= '%s' and CID='%s' "%(a,b)
        cur.execute(delete_sql) 
    
    con.commit()
    print('{}表删除记录成功'.format(table_name))
    print('*********'*14)
    
if __name__=='__main__':
    
    #创建数据库stu
    database_creat('stu')
    
    #打开数据库连接
    con = pymysql.connect(host='localhost',user = "root",passwd = "123456",port=3306, db='stu')

    #获取游标
    cur=con.cursor()

    #创建表
    table_creat(cur,'student')
    table_creat(cur,'course')
    table_creat(cur,'score')
    table_creat(cur,'teacher')
    table_creat(cur,'job')

    
    flag=True
    dict={'1':'student','2':'course','3':'score','4':'teacher','5':'job'}
    while (flag):
        print('选择功能:')
        print('1 录入信息 | 2 查询信息 | 3 修改信息 | 4 删除信息 | 5 查看表 | 6 退出 ')
        op=int(input())
        
        if(op==1):
            while True:
                print('选择表:')
                print('1 student | 2 course | 3 score | 4 teacher | 5 job | 6 exit ( 输入信息期间输入6都可退出)')
                a=input()
                if(a == '6'):  break
                elif a=='1': 
                    print('输入信息(格式: 学号 姓名 年级):',end='')
                    info=input()
                    if info=='6': break
                    lis=info.split(' ')
                    insert_info(con,cur,dict[a],lis)
                elif a=='2':
                    print('输入信息(格式: 课程号 课程名 学时 学分):',end='')
                    info=input()
                    if info=='6': break
                    lis=info.split(' ')
                    insert_info(con,cur,dict[a],lis)
                elif a=='3':
                    print('输入信息(格式: 学号 课程号 成绩):',end='')
                    info=input()
                    if info=='6': break
                    lis=info.split(' ')
                    insert_info(con,cur,dict[a],lis)
                elif a=='4':
                    print('输入信息(格式: 教师工号 教师姓名 教师专业):',end='')
                    info=input()
                    if info=='6': break
                    lis=info.split(' ')
                    insert_info(con,cur,dict[a],lis)
                elif a=='5':
                    print('输入信息(格式: 教师工号 课程号 上课学年):',end='')
                    info=input()
                    if info=='6': break
                    lis=info.split(' ')
                    insert_info(con,cur,dict[a],lis)
                
                 
        elif op==2:
            view_info(con,cur)
            
        elif op==3:
            while True:
                print('选择表:')
                print('1 student | 2 course | 3 score | 4 teacher | 5 job | 6 exit ( 输入信息期间输入6都可退出)')
                a=input()
                if(a == '6'):  break
                elif a=='1': 
                    print('指定学号输入信息(格式: 学号 姓名 年级):',end='')
                    info=input()
                    if info=='6': break
                    lis=info.split(' ')
                    modify_info(con,cur,dict[a],lis)
                elif a=='2':
                    print('指定课程号输入信息(格式: 课程号 课程名 学时 学分):',end='')
                    info=input()
                    if info=='6': break
                    lis=info.split(' ')
                    modify_info(con,cur,dict[a],lis)
                elif a=='3':
                    print('指定学号和课程号输入信息(格式: 学号 课程号 成绩):',end='')
                    info=input()
                    if info=='6': break
                    lis=info.split(' ')
                    modify_info(con,cur,dict[a],lis)
                elif a=='4':
                    print('指定教师工号输入信息(格式: 教师工号 教师姓名 教师专业):',end='')
                    info=input()
                    if info=='6': break
                    lis=info.split(' ')
                    modify_info(con,cur,dict[a],lis)
                elif a=='5':
                    print('输入信息(格式: 教师工号 课程号 上课学年):',end='')
                    info=input()
                    if info=='6': break
                    lis=info.split(' ')
                    modify_info(con,cur,dict[a],lis)
                
        elif op==4: 
             while True:
                print('选择表:')
                print('1 student | 2 course | 3 score | 4 teacher | 5 job | 6 exit ( 输入信息期间输入6都可退出)')
                a=input()
                if(a == '6'):  break
                elif a=='1': 
                    delete_info(con,cur,dict[a])
                elif a=='2':
                    delete_info(con,cur,dict[a])
                elif a=='3':
                    delete_info(con,cur,dict[a])
                elif a=='4':
                    delete_info(con,cur,dict[a])
                elif a=='5':
                    delete_info(con,cur,dict[a])
            
        elif op==6:
            print('*********'*14)
            break
            
        elif op==5:
              while True:
                print('选择表:')
                print('1 student | 2 course | 3 score | 4 teacher | 5 job | 6 exit ( 输入信息期间输入6都可退出)')
                a=input()
                if(a == '6'):  break
                elif a=='1': 
                    view_table(cur,dict[a])
                elif a=='2':
                    view_table(cur,dict[a])
                elif a=='3':
                    view_table(cur,dict[a])
                elif a=='4':
                    view_table(cur,dict[a])
                elif a=='5':
                    view_table(cur,dict[a]) 
                elif a=='6':
                    break;
            
        
    
    
    cur.close()#先关闭游标
    con.close()#再关闭数据库连接
    



实验截图:
在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值