数据库
首页 > 数据库> > 1.10数据库编程练习

1.10数据库编程练习

作者:互联网

第一关 数据库表创建 

        在名为 nudt 的数据库下,创建课程表(Course)和教师表(Teacher),表结构如下:

课程表(Course)

字段名字段类型说明
CnoCHAR(10)课程编号(主键
CnameCHAR(100)课程名称
TnoCHAR(10)教师编号

教师表(Teacher)

字段名字段类型说明
TnoCHAR(10)教师编号(主键
TnameCHAR(100)教师名称
TsexCHAR(10)教师性别

mysql连接参数如下:

host='localhost',port=3306,user='root',passwd='123123'

import pymysql

if __name__ == '__main__':
    # **********begin********** #
    conn = pymysql.connect(host='localhost',port=3306,
                        user='root',passwd='123123',
                        charset='utf8',db='nudt')
    cursor = conn.cursor();
    sql = """
    CREATE TABLE Course(
    Cno CHAR(10) PRIMARY KEY,
    Cname CHAR(100),
    Tno CHAR(10)
    )ENGINE=innodb DEFAULT CHARSET=utf8;
    CREATE TABLE Teacher(
    Tno CHAR(10) PRIMARY KEY,
    Tname CHAR(100),
    Tsex CHAR(10)
    )ENGINE=innodb DEFAULT CHARSET=utf8;
    """
    cursor.execute(sql)
    cursor.close()
    conn.close()
    # **********end********** #
   

第二关  数据更新

将教师数据插入教师表(Teacher)

教师编号教师名称教师性别
T1周海芳
T2周竞文
T3谭春娇
T4陈立前
T5李暾
T6毛晓光

将课程数据插入课程表(Course)

课程编号课程名称教师编号
C1大学计算机基础T1
C2大学计算机基础T2
C3数据库原理与技术T2
C4大学计算机基础T5
C5程序设计T1
C6程序设计T4
C7数字图像处理T1
C8抽象代数T6
C9离散数学T5
C10软件可靠性T6

数据库连接参数如下:

host='localhost', port=3306,user='root', passwd='123123', db="nudt",charset='utf8'

import pymysql

if __name__ == '__main__':
    # **********begin********** #
    conn = pymysql.connect(
        host = 'localhost',
        port = 3306,
        user = 'root',
        password = '123123',
        database = 'nudt',
        charset = 'utf8'
    )
    cursor = conn.cursor()
    sql = 'insert into Teacher(Tno,Tname,Tsex) values(%s,%s,%s);'
    data = [
        ('T1','周海芳','女'),
        ('T2','周竞文','男'),
        ('T3','谭春娇','女'),
        ('T4','陈立前','男'),
        ('T5','李暾','男'),
        ('T6','毛晓光','男')
    ]
    cursor.executemany(sql,data)
    conn.commit()
    sql = 'insert into Course(Cno,Cname,Tno) values(%s,%s,%s);'
    data = [
        ('C1','大学计算机基础','T1'),
        ('C2','大学计算机基础','T2'),
        ('C3','数据库原理与技术','T2'),
        ('C4','大学计算机基础','T5'),
        ('C5','程序设计','T1'),
        ('C6','程序设计','T4'),
        ('C7','数字图像处理','T1'),
        ('C8','抽象代数','T6'),
        ('C9','离散数学','T5'),
        ('C10','软件可靠性','T6')
    ]
    cursor.executemany(sql,data)
    conn.commit()
    cursor.close()
    conn.close()
    # **********end********** #

第三关 单表查询

        1.查询所用表:Teacher

        2.查询男老师数量并将数值赋予给变量 maleNum

        3.查询女老师数量将数值赋予给变量 femaleNum

        4.将变量 maleNum 与变量 femaleNum 输出到控制台,格式如 --> 变量名:数值(拼接时使用逗号拼接,不要使用加号)

import pymysql
import matplotlib

matplotlib.use('Agg')
import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']

if __name__ == '__main__':
    # **********begin********** #
    # 获取连接对象
    conn = pymysql.connect(host = 'localhost',port = 3306,
                        user = 'root',passwd = '123123',
                        db='nudt',charset='utf8')
    # 获取光标
    cs = conn.cursor()
    # 查询男老师数量并将数值赋予给变量 maleNum
    cs.execute("select* from Teacher where Tsex='男'")
    maleNum = len(cs.fetchall())
    # 查询女老师数量将数值赋予给变量 femaleNum
    cs.execute("select* from Teacher where Tsex='女'")
    femaleNum = len(cs.fetchall())
    # 将变量 maleNum 与变量 femaleNum 输出到控制台,格式如 -->  变量名:数值
    # 例如: maleNum:100
    # 注意:一行输出一个变量,请先输出变量 maleNum ,其次是变量 femaleNum
    print("maleNum: %d" % maleNum)
    print("femaleNum: %d" % femaleNum)
    cs.close()
    conn.close()
    # 绘制柱状图
    plt.xticks(fontsize=12)
    plt.yticks([])  # 不显示y轴刻度
    plt.text(0, maleNum * 0.5, maleNum, ha='center', fontsize=30)
    plt.text(1, femaleNum * 0.5, femaleNum, ha='center', fontsize=30)
    plt.bar(range(2), (maleNum, femaleNum), color='gy', tick_label=('男', '女'))
    plt.savefig("img/1.png")
    # 关闭资源
    # **********end********** #

第四关 多表查询

连接参数如下:

  1. host='localhost', port=3306,
  2. user='root', passwd='123123',
  3. charset='utf8', db="nudt"

课程表(Course)

字段名字段类型说明
CnoCHAR(10)课程编号(主键
CnameCHAR(100)课程名称
TnoCHAR(10)教师编号

表数据如下:

教师表(Teacher)

字段名字段类型说明
TnoCHAR(10)教师编号(主键
TnameCHAR(100)教师名称
TsexCHAR(10)教师性别

表数据如下:

import pymysql
import matplotlib

matplotlib.use('Agg')
import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']

if __name__ == '__main__':
    # **********begin***********#

    # 获取连接对象
    conn = pymysql.connect(host = 'localhost',port = 3306,
                        user = 'root',passwd = '123123',
                        db='nudt',charset='utf8')

    # 获取光标
    cs = conn.cursor()

    # 执行SQL,统计教师的课程数量并按照教师名称倒序
    sql = "select Tname,count(Cno) \
            from Teacher left outer join Course \
            on Teacher.Tno = Course.Tno \
            group by Tname \
            order by Tname desc"

    cs.execute(sql)

    # 获取结果集,将其赋予给变量 results
    results = cs.fetchall()

    # 遍历结果集,按照格式 --> 教师:课程数量 ,输出到控制台
    for result in results:
        print("%s : %d" % (result[0],result[1]))
        
    # 绘制柱状图
    names, courseNum = zip(*results)
    plt.xticks(fontsize=16)
    plt.yticks([])  # 不显示y轴刻度
    for i in range(len(courseNum)):
        plt.text(i, courseNum[i] * 0.5, courseNum[i], ha='center', fontsize=20)
    plt.bar(range(len(courseNum)), courseNum, color='y', tick_label=names)
    plt.savefig("step4_img/1.png")

    # 关闭资源
    cs.close()
    conn.close()

    # **********end**********#

第五关 信息管理系统

        1.补全 addCourse(cs) 函数,完成添加课程信息功能。

        2.补全 updateCourse(cs) 函数,完成修改课程信息功能。

        3.补全 findCourseByCno(cs) 函数,完成查询课程信息功能。

        4.补全 deleteCourse(cs) 函数,完成删除课程信息功能。

        5.补全 findCourseByTeacherName(cs) 函数,完成通过教师名称查询课程名称功能。

        6.补全 selectTeacherByCname(cs) 函数,完成通过课程名称查询教师名称功能。

课程表(Course)

字段名字段类型说明
CnoCHAR(10)课程编号(主键
CnameCHAR(100)课程名称
TnoCHAR(10)教师编号

表数据如下:

教师表(Teacher)

字段名字段类型说明
TnoCHAR(10)教师编号(主键
TnameCHAR(100)教师名称
TsexCHAR(10)教师性别

表数据如下:

import pymysql


# 添加课程信息,输入课程信息格式为:Cno,Cname,Tno
def addCourse(cs):
    courseInfo = input()
    # **********begin********** #
    course = courseInfo.strip().split(",")
    sql="INSERT INTO Course(Cno,Cname,Tno) values(%s,%s,%s)"
    Cno = course[0]
    Cname = course[1]
    Tno = course[2]
    cs.execute(sql,[Cno,Cname,Tno])
    # **********end********** #


# 修改课程信息(通过课程编号修改课程名称),输入新课程信息格式为:Cno,Cname
def updateCourse(cs):
    courseInfo = input()
    # **********begin********** #
    course = courseInfo.strip().split(",")
    sql="UPDATE Course SET Cname=%s WHERE Cno=%s"
    Cno = course[0]
    Cname = course[1]
    cs.execute(sql,[Cname,Cno])
    # **********end********** #


# 查询课程信息(通过课程编号查询课程信息),输入课程编号 Cno
# 将课程信息打印到控制台
def findCourseByCno(cs):
    courseId = input()
    # **********begin********** #
    course = courseId.strip()
    sql="SELECT* FROM Course WHERE Cno=%s"
    cs.execute(sql,course)
    print(cs.fetchall())
    # **********end********** #


# 删除课程信息(通过课程编号删除课程信息),输入课程编号 Cno
def deleteCourse(cs):
    courseId = input()
    # **********begin********** #
    course = courseId.strip()
    sql="DELETE FROM Course WHERE Cno=%s"
    cs.execute(sql,course) 
    # **********end********** #


# 通过教师名称查询课程名称并将其打印到控制台,输入教师名称 Tname
# 打印格式为:课程名  (一个课程名一行,不含其它字符)
def findCourseByTeacherName(cs):
    tname = input()
    # **********begin********** #
    tname = tname.strip()
    sql="""SELECT Cname FROM Teacher,Course 
        WHERE Teacher.Tno=Course.Tno
        AND Tname = %s"""
    cs.execute(sql,tname)
    for name in cs.fetchall():
        print(name[0])
    # **********end********** #


# 通过课程名称查询教师名称并将其打印到控制台,输出课程名称 Cname
# 打印格式为:教师名  (一个教师名一行,不含其它字符)
def selectTeacherByCname(cs):
    cname = input()
    # **********begin********** #
    cname = cname.strip()
    sql="""SELECT Tname FROM Course,Teacher
            WHERE Course.Tno = Teacher.Tno
                AND Cname = %s"""
    cs.execute(sql,cname)
    for name in cs.fetchall():
        print(name[0])
    # **********end********** #

def Test(cs):
    sql = "select * from Course"
    cs.execute(sql)
    courseInfo = cs.fetchall()
    print(courseInfo)


if __name__ == '__main__':
    conn = pymysql.connect(host='localhost', port=3306,
                           user='root', passwd='123123', db="nudt", charset='utf8')
    command = input()
    cs = conn.cursor()
    if command == '01':
        addCourse(cs)
    elif command == '02':
        updateCourse(cs)
    elif command == '03':
        findCourseByCno(cs)
    elif command == '04':
        deleteCourse(cs)
    elif command == '05':
        findCourseByTeacherName(cs)
    elif command == '06':
        selectTeacherByCname(cs)
    conn.commit()
    Test(cs)
    cs.close()
    conn.close()

标签:__,教师,1.10,数据库,编程,Course,课程,sql,cs
来源: https://blog.csdn.net/weixin_46561163/article/details/121423592