首先安装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()#再关闭数据库连接
实验截图: