Python程序设计实例 | 学生管理数据库系统的开发

2023-09-19 08:58:41

本文将通过一个学生管理数据库系统的开发过程来展示如何系统地基于Python实现SQLite数据库编程。以下首先提出数据库系统的基本结构,以及如何通过SQLite逐步达到这些要求并进行常规操作。

01、数据表结构

该学生管理数据库系统包括4张表: 专业表、学生表、课程表和成绩表,用于实现对专业信息、学生信息、课程信息和成绩的综合管理。

1. 专业表

专业表包括专业编号和专业名称两个列,具体设置见表1。

■ 表1 专业表的结构

2. 学生表

学生表包括学号、姓名、性别、生日、专业编号、奖学金、党员、照片和备注等列,具体设置见表2。学生表中以专业编号作为外键,指向专业表中的专业编号,实施参照完整性。

■ 表2 学生表的结构

3. 课程表

课程表包括课程号、课程名称、先修课程代码、学时和学分等列,具体设置参见表3。

■ 表3 课程表的结构

4. 成绩表

成绩表包含学号、课程号和成绩三列,具体请参见表4。其中,学号和课程号共同构成为主键。该表中的学号是外键,指向学生表中的学号; 课程号是外键,指向课程表中的课程号,实施参照完整性。

■ 表4 成绩表的结构

 

02、学生管理数据库系统的实现

1. 数据准备

为了规范数据输入,分别用4个txt文档存储4张表原始数据。文档中的数据组织形式为: 列1值,列2值,…。以专业表为例,在对应的txt文档中,数据组织形式如下:

因此,在构建好相应的数据表结构之后,可方便地通过编写函数来统一地将txt文档中的数据导入对应数据表中。

2. 关键函数

为了减少数据库系统构建过程中代码的重复,应将可能重复执行的代码包装成函数。本系统开发中构建了以下函数。

(1) 数据表创建及数据导入函数: create_table()。

(2) 数据表结构查询函数: table_struct()。

(3) 数据表记录查询函数: table_quer()。

3. 数据库系统构建代码实现

在给出源代码之前,先简单介绍一下SQLite中的PRAGMA命令。PRAGMA是一个特殊的命令,可以查询SQLite中的非表数据,还可以修改SQLite中的参数设置。

下面给出学生管理数据库系统的实现代码。

#create stu db.py
#coding =utf-8
import sqlite3
#构建函数来实现数据表的创建及文本数据的导入
def create table(tab name, col prop list,txt path, conn, cur):
col name props =,'.join(col prop list)
cur.execute('CREATE TABLE IF NOT EXISTS %s(s)(tab name,col name props))
f = open(txt path,'r')
for x in f:
x = x.rstrip().split(',')
a=["%&s",%x[i] for iin range(len(x))]
x = ','.join(a);
cur.execute('INSERT INTO %s values(%s)(tab name,x))
f.close()
print('%s创建成功'%  tab name)
print('%s导人成功'% txt path)
conn.commit()
#构建数据表结构查询函数
def table struct(cur, tab name):
cur.execute("PRAGMA table_info(%s)"% tab_name
t struct = cur.fetchall()
for item in t_struct:
for x in item:
x = str(x)
print(x,sep= '\t',end = '')
print()
#构建数据表内容查询函数
def table quer(cur,tab_name,col_names ='*',num_line = None):
cur.execute('select %s from %s%(col——names,tab_name))
Li = cur.fetchall()
for line in Li[:num_line]
for item in line:
print(item,sep='\'t,end = '')
print()
if_name__ == '_main_':
conn = sqlite3.connect('d:/test/Shift MIS.db')
cur = conn.cursor()
cur.execute(PRAGMA foreign keys = ON”)
#(1)创建专业表
tab name 1 = '专业表'
col_prop_list_1 =['专业编号 varchar(7) primary key''专业名称 varchar(7)]
txt_path_1 =专业表.txt'
create_table(tab_name_1,col prop list 1,txt_path_1,conn= conn,cur = cur)
#(2)创建学生表
tab_name_2= '学生表'
col_prop_list_2=['学号 varchar(7) primary key'
'姓名 varchar(7)'
'性别 tinyint'
'生日 text NULL'
'专业编号 varchar(7) REEERENCES 专业表(专业编号)ON UPDATE
CASCADE ON DELETE CASCADE',
奖学金 numeric NULL'
党员 tinvint NULL
照片 blob NULL'
备注 text NULL'
txt_path_2=学生表.txt
create_table(tab_name_2, col_prop list_2, txt_path_2,conn= conn,cur = cur)
#(3)创建课程表
tab_name_3 = '课程表'
col prop_1ist_3 = ['课程号varchar(7)primarvkev'
课程名称 varchar(7) NULL'
先修课程代码 varchar(7) NULL'
学时 smallint,学分 smallint']
txt_path_3 = '课程表.txt'
create_table(tab_name_3, col_prop_list_3,txt_path_3,conn = conn,cur = cur)
# (4)创建成绩表
tab_name_4 = '成绩表'
col_prop_list_4 = 
['学号 varchar(7)REFERENCES 学生表(学号)ON UPDATE CASCADE ON DELETE CASCADE',课程号 varchar(7)REFERENCES 课程表(课程号)ON UPDATE CASCADE ON DELETE CASCADE',成绩 smallint NULL',
PRIMARY_KEY(学号,课程号)]
txt_path_4 = '成绩表.txt'
create_table(tab_name_4,col_prop_list_4,txt_path_4,conn = conn,cur = cur)
# 关闭链接
conn.close()

 程序creat_stu_db.py的运行结果如下:

同时在“d: /test/”目录下生成数据库文件Shift_MIS.db。

4. 数据库操作

对于一个已经存在的数据库,需要先建立链接,然后通过该链接对数据库进行查询、修改等操作。例如:

 由于后面需要用到create_stu_db.py文件中的相关函数,所以需要先导入该模块中的对象。

查询数据库中所有的数据表:

 

下面分别调用create_stu_db.py文件中定义的函数table_struct()和table_quer()查询各表的结构和表中的前10行记录。

1) 专业表查询

数据结构查询:

前10行数据查询:

 

2)学生表查询

数据结构查询:

前10行数据查询(包括学号、姓名、专业编号和奖学金):

3) 课程表查询

数据结构查询:

 前10行数据查询:

4) 成绩表查询

数据结构查询:

 前10行数据查询:

5) 综合查询

数据库创建成功之后,用户可以根据自己的需求,通过编写SQL语句进行相应的查询操作。例如,以下查询语句的执行将返回“国际贸易法”课程成绩大于或等于90分的学生的学号、姓名、课程名称和成绩,并按学号的升序排列。SQL语句如下:

>>>cur.execute(SELECT 学生表.学号,学生表.姓名,课程表.课程名称,成绩表.成绩EROM 学生表 JOIN 成绩表 JOIN 课程表
ON 学生表.学号=成绩表.学号 AND 课程表.课程号= 成绩表课程号
WHERE 成绩表成绩>= 90 and 课程表课程名称 =”国际贸易法"ORDER BY 学生表.学号 ASC''')
>>> for line in cur.fetchall():
for x in line:
print(x,sep= '\t',end = '')
print()
9706006 朱睿立 国际贸易法 90
9706012何英 国际贸易法 91
9706019 李辛怡 国际贸易法 93
9706025卜应龙 国际贸易法 94
9706026 龚晨晓 国际贸易法 93 
9706028 王洁 国际贸易法  90
>>>

 执行完数据库的相关操作后,通过以下代码关闭链接:

>>>conn.close()

更多推荐

【C语言】结构

结构类型声明结构变量structdata{//结构成员intmonth;intday;intyear;};//或structpoint{intx;inty;}p1,p2;//只定义了两个变量struct{inta;intb;}s1,s2;定义结构变量structdatatoday;//定义一个变量today,里面有mo

Redis-带你深入学习数据类型zset

目录1、zset有序集合2、zset相关命令2.1、添加或更新指定的元素——zadd2.2、获取有序集合zset的元素个数相关命令:zcard、zcount2.3、返回指定区间元素相关命令:zrange、arevrange、zrangebyscore2.4、删除相关命令:zpopmax、zpopmin、bzpopmax

UI设计需要学会哪些软件?优漫动游

想要学习UI设计,那么就要先学会UI设计软件,这是基础知识,学会软件后,你会发现软件以外的真正UI设计的能力,软件仅仅只是一个工具。今天这篇文章就是给予初学者正确的UI设计观念,详细的了解一下UI设计需要学会哪些软件?UI设计需要学会哪些软件?UI设计需要学会哪些软件?UI是“用户界面”的意思,UI设计涉及到的领域有:

构建自动化测试环境:使用Docker和Selenium!

随着软件开发的日益复杂和迭代速度的加快,自动化测试被越来越广泛地应用于软件开发流程中。它能够提高测试效率、减少测试成本,并保证软件质量的稳定性。在构建自动化测试环境方面,Docker和Selenium是两个非常有用的工具。下面将介绍如何使用Docker和Selenium构建自动化测试环境。一、Docker简介Docke

电商业务--技术负责人 250K*15

职位描述研发团队管理系统搭建技术管理系统架构岗位职责负责/参与到中大型负责系统的整体架构和设计;根据业务特点和行业最佳实践,设计符合多个市场物流业务需求,且具备可扩展能力的系统架构和业务架构承担团队稳定性建设工作,包括物流全球多机房调度、稳定性治理、资损防控、容灾降级等深入理解业务,强技术驱动,能够深入挖掘业务痛点,调

2023-9

内核向应用层发送netlink单播消息:nlmsg_unicast->netlink_unicast->netlink_sendskb->__netlink_sendskb->把skb链入structsock的sk_receive_queue链表中,再调用sk->sk_data_ready(sk);->sock_def

JavaScript 的面向对象基础,设计模式中的原型模式(设计模式与开发实践 P2)

文章目录1.1动态类型语言和鸭子类型1.2多态1.3封装封装数据封装实现封装类型1.4原型模式和基于原型继承的JavaScript对象系统C#原型模式JS原型模式在学习JS设计模式之前需要了解一些设计模式基础,如果不是JavaScript用户可以直接跳到设计模式篇的讲解~1.1动态类型语言和鸭子类型编程语言按照数据类型

深度分析Oracle中的NULL

【squids.cn】全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等关键点特殊值NULL意味着没有数据,它声明了该值是未知的事实。默认情况下,任何类型的列和变量都可以取这个值,除非它们有一个NOTNULL约束。此外,数据库管理系统会自动向包含在表的主键中的列添加NOT

七、【漏洞复现】YApi接口管理平台远程代码执行漏洞

七、【漏洞复现】YApi接口管理平台远程代码执行漏洞7.1、漏洞原理若YApi对外开放注册功能,攻击者可在注册并登录后,通过构造特殊的请求执行任意代码,接管服务器。7.2、影响版本YApi<=V1.92All7.3、指纹识别1.有注册登陆主页2.使用指纹识别类平台识别。7.4、漏洞复现1.注册账号2.新建项目-名称随意

uniapp引入小程序原生插件

怎么在uniapp中使用微信小程序原生插件,以收钱吧支付插件为例1、在manifest.json里的mp-weixin中增加插件配置"mp-weixin":{"appid":"你的小程序appid","setting":{"urlCheck":false},"usingComponents":true,//在下面配置插

1.9python基础语法——运算符

1)算数运算符运算符描述实例+加1+1输出结果为2-减1-1输出结果为0*乘2*2输出结果为4/除10/2输出结果为5//整除9//4输出结果为2%取余9%4输出结果为1**指数2***4输出结果为16,即2*222()小括号小括号用来提高运算优先级,即(1+2)*3输出结果为9注意:混合运算优先级顺序:()高于**高

热文推荐