版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务9:基于SQLite的学生信息管理系统Python程序设计1、任务描述目录2、技术准备Python程序设计3、任务实施1、任务描述几乎所有的信息管理系统都离不开数据库的支持。本任务基于SQLite数据库来实现学生信息管理系统,系统主要功能有学生基本信息的添加、删除、修改、显示和数据导入导出及成绩统计等。要完成本任务需要了解和掌握SQLite数据库的基本操作及Python如何操作SQLite数据库。Python支持目前常用的数据库,如SQLite、MySQL、Oracle、SQLServer、MongoDB等。SQLite数据库使用简单方便,且Python本身内置了操作SQLite的相应模块,不需要额外安装数据库管理系统及第三方扩展库,其他数据库的使用需要安装相应的数据库管理系统及第三方扩展库。本任务基于SQLite数据库来实现。2.1
SQLite数据库简介技术准备2.2Python操作SQLite数据库Python程序设计2.3
connection对象2.4
cursor对象2.1SQLite数据库简介1、SQLite数据库SQLite数据库是一个轻量级的关系型数据库管理系统,它的设计目标是嵌入式的,在一些嵌入式产品中应用比较广泛。SQLite中单个数据库最大允许为140TB,每个数据库完全存储在单个磁盘文件中,一个数据库就是一个文件,通过直接复制数据库文件就可实现数据库的备份。SQLite是关系型数据库,一个数据库可由多个数据库表组成,一个数据库表就是一张二维表格。每张表格都有一个名字,且名称必须是唯一的。表由若干条记录构成。每条记录包含若干个字段。每个字段的名称也必须是唯一的,每个字段都有对应的数据类型和取值范围。SQLite中支持null(空)、integer(整型)、real(浮点数)、text(文本)和blob(大二进制对象)5种数据类型。2.1SQLite数据库简介2、SQL语句SQL(StructuredQueryLanguage)结构化查询语言,是操作各种关系型数据库的通用语言。SQLite支持使用SQL语句来访问数据库。常用的SQL语句有以下几种:(1)表的创建格式:createtable表名(字段名类型,字段名类型,…)【例9‑1】创建一个student表,包含no(学号)、name(姓名)、sex(性别)、score(成绩)字段。createtablestudent(notext,nametext,sextext,scoreinteger)(2)记录的插入格式:insertinto表名([字段列表])values(字段值列表)说明:字段值和字段一一对应,如果是给所有字段赋值,字段列表可以省略。【例9‑2】向表student中插入一条记录。insertintostudentvalues('1001','李军','男',89)2.1SQLite数据库简介(3)记录的修改格式:update表名set字段名=值[,字段名=值][where条件]说明:可一次可修改一个字段的值,也可一次修改多个字段的值。如不加条件表示默认修改所有记录,否则只修改满足条件的记录。【例9‑3】将student表中成绩在60分以下的修改为60。updatestudentsetscore=60wherescore<60(4)记录的删除格式:deletefrom表名[where条件]说明:若不加条件表示删除表中所有记录,否则只删除满足条件的记录。【例9‑4】删除表中所有的男生记录。deletefromstudentwheresex='男'2.1SQLite数据库简介(5)记录的查询格式:select字段列表from表名[where条件][orderby字段[asc|desc]][groupby字段][limitn,m]说明:①
字段列表可以是表中的一个或多个字段,各字段之间用逗号分隔,如要选择所有字段,可用“*”表示。②where条件:表示只查询满足条件的记录。③orderby字段:表示查询结果按指定字段进行排序,默认升序排列(asc),desc表示降序排列。④groupby字段:表示按字段对记录进行分组统计。常配合count()、sum()、avg()、max()和min()等函数使用。⑤limitn,m:表示选取从第n条记录开始的m条记录,如n省略,表示选取前m条记录。2.1SQLite数据库简介【例9‑5】select语句使用。①
查询student表中所有记录。select*fromstudent②
查询表中成绩在90分以上的学生记录。select*fromstudentwherescore>=90③
查询表中所有的记录,按成绩从高到低排序。select*fromstudentorderbyscoredesc④
查询表中所有男生、女生的人数。selectsex,count(*)as人数fromstudentgroupbysex⑤
查询表中从第3条记录开始的4条记录。select*fromstudentlimit3,42.1SQLite数据库简介3、可视化管理工具SQLite数据库没有提供图形操作界面,多数情况下都是通过SQL语句来对数据库操作,但也有一些可视化管理工具如SQLiteManager、SQLiteDatabaseBrowser等提供了SQLite的图形化界面,可以利用这些可视化管理工具来对数据库进行管理。2.2Python操作SQLite数据库1、模块导入Python自带对SQLite数据库的支持,要访问和操作SQLite数据库,需要先导入相应的sqlite3模块。>>>importsqlite3#导入sqlite3模块2、Python操作SQLite数据库的基本步骤(1)建立数据库连接格式:con=sqlite3.connect(<数据库名>)功能:建立与指定数据库的连接,如果指定的数据库不存在,会自动创建该数据库。连接成功后返回一个与数据库关联的connection对象。con为自行指定的connection对象名。>>>con=sqlite3.connect('d:/db/stud.db')#建立数据库连接(2)从连接对象获取游标对象cursor格式:cur=con.cursor()功能:从数据库连接对象获取游标对象cursor。con为上一步中数据库连接成功后的connection对象。cur为自行指定的游标名。2.2Python操作SQLite数据库(3)执行相应的sql语句格式:cur.execute(sql)功能:执行sql语句。cur为从数据库连接对象获取的游标对象。说明:sql语句的执行既可利用游标对象cursor的execute()方法,也可直接利用数据库连接对象connection的execute()方法。(4)提交事务格式:mit()功能:提交所有的操作,把更新写入到数据库中。(5)关闭游标和数据库连接格式:cur.close()#关闭游标对象con.close()#关闭数据库连接对象功能:关闭游标对象和数据库连接对象,释放相应的资源。2.2Python操作SQLite数据库【例9‑6】Python操作SQLite数据库的流程。>>>importsqlite3#导入sqlite3模块>>>con=sqlite3.connect('d:/db/stud.db')#建立数据库连接>>>cur=con.cursor()#获取游标对象>>>sql="insertintostudentvalues('1001','李军','男',90)"#sql语句>>>cur.execute(sql)#执行sql语句<sqlite3.Cursorobjectat0x0000001631715570>>>>mit()#提交事务>>>cur.close()#关闭游标对象>>>con.close()#关闭数据库连接2.3connection对象建立数据库连接时,连接成功返回一个与数据库相关联的connection对象。该对象提供了若干方法来对数据库操作。方法说明execute(sql[,parameters])执行一条sql语句executemany(sql[,parameters])执行多条sql语句cursor()返回连接的游标commit()执行当前事务(事务其实就是一系列操作),如果不提交,那么上次调用commit()方法之后的所有修改都不会真正保存到数据库中rollback()撤销当前事务,将数据库恢复至上次调用commit()方法后的状态close()关闭数据库连接2.4cursor对象connection对象的cursor()方法调用成功后返回一个cursor对象,用于对查询到的结果进行操作,该对象的常用方法如下表所示:方法说明execute(sql[,parameters])执行一条sql语句executemany(sql[,parameters])执行多条sql语句fetchone()从结果集中获取一条记录fetchall()从结果集中获取所有记录fetchmany([size])从结果集中获取多条记录close()关闭游标2.4cursor对象1、execute()方法格式:execute(sql[,parameters])功能:执行一条sql语句,可以为sql语句传递参数。传递参数时可以使用问号“?”和命名变量作为占位符。connection对象和cursor对象都提供了执行sql语句的execute()和executemany()方法。两者使用基本相同。2.4cursor对象execute()使用示例:>>>importsqlite3>>>con=sqlite3.connect('d:/db/stud.db')>>>cur=con.cursor()>>>sql="insertintostudentvalues('1002','孙明','男',87)">>>cur.execute(sql)<sqlite3.Cursorobjectat0x000000BEFC1955E0>>>>sql="insertintostudentvalues(?,?,?,?)"#sql语句中使用“?”作为占位符>>>cur.execute(sql,('1003','王芳','女',80))#以元组形式传递相应的参数<sqlite3.Cursorobjectat0x000000FF0F97F730>>>>sql="insertintostudentvalues(:no,:name,:sex,:score)"#使用命名变量作为占位符>>>cur.execute(sql,{'no':'1004','name':'李云','sex':'女','score':90})#以字典形式传递参数<sqlite3.Cursorobjectat0x000000BEFC1955E0>>>>mit()2.4cursor对象2、executemany()方法格式:executemany(sql[,parameters])功能:一次执行多条sql语句,同样支持为sql语句传递参数。传递参数时可以使用问号“?”和命名变量作为占位符。该方法通常用来对所有给定参数执行同一个sql语句,参数序列可以使用不同方式产生。>>>con=sqlite3.connect('d:/db/stud.db')>>>cur=con.cursor()>>>stus=[('1005','赵宁','男',78),('1006','张朋','男',98)]#待插入数据>>>sql="insertintostudentvalues(?,?,?,?)"#sql语句>>>cur.executemany(sql,stus)#为待插入数据序列中每个元素执行一次sql语句<sqlite3.Cursorobjectat0x000000BEFC1CD260>>>>mit()2.4cursor对象3、fetchone()方法当sql语句是select查询时,执行后会返回相应的查询结果集(为一可迭代对象),fetchone()方法用于从查询结果集中读取当前一条记录,以元组的形式返回。每读取一次,指针自动往下移动到下一条记录。>>>con=sqlite3.connect('d:/db/stud.db')>>>cur=con.cursor()>>>sql="select*fromstudent">>>result=cur.execute(sql)#执行查询,返回结果集>>>row=result.fetchone()#读取一条记录>>>row('1001','李军','男',90)#结果为表中第1条记录>>>row=result.fetchone()#读取一条记录>>>row('1002','孙明','男',87)#结果为表中第2条记录2.4cursor对象4、fetchall()方法fetchall()方法用于从结果集中获取所有记录。以列表形式返回,列表中每个元素是一元组,存放的是表中的一条记录。>>>con=sqlite3.connect('d:/db/stud.db')>>>cur=con.cursor()>>>sql="select*fromstudent">>>result=cur.execute(sql)>>>rows=result.fetchall()#获取所有记录>>>rows[('1001','李军','男',90),('1002','孙明','男',87),('1003','王芳','女',80),('1004','李云','女',90),('1005','赵宁','男',78),('1006','张朋','男',98)]2.4cursor对象5、fetchmany()方法格式:fetchmany([size])功能:用于从结果集中获取指定的记录条数。如果参数size省略,则默认获取一条记录。返回结果为一列表,列表中每个元素是一元组,存放的是表中的一条记录。>>>con=sqlite3.connect('d:/db/student.db')>>>cur=con.cursor()>>>sql="select*fromstudent">>>result=cur.execute(sql)>>>rows=result.fetchmany(2)#获取2条记录>>>rows[('1001','李军','男',90),('1002','孙明','男',87)]>>>rows=result.fetchmany()#没指定大小,只获取一条记录
>>>rows[('1003','王芳','女',80)]2.4cursor对象6、
结果集的遍历当使用select查询时返回的查询结果集是一可迭代对象,既可以用前面介绍的fetchone()、fetchall()、fetchmany()方法来获取结果集中的记录,也可直接利用for循环遍历结果集。importsqlite3
con=sqlite3.connect('d:/db/stud.db')cur=con.cursor()sql="select*fromstudent"result=cur.execute(sql)forrowinresult:print(row)cur.close()con.close()3.1准备工作任务实施3.2数据库设计及操作Python程序设计3.3学生基本信息管理3.4学生成绩统计3.5系统界面3.6系统测试3.1
准备工作首先导入所需的库,相关代码如下:importosimportsqlite33.2
数据库设计及操作将学生信息存储在数据库StuDB中的student表中,表中字段包括学号、姓名、语文成绩、数学成绩和英语成绩5个字段。定义一个StuDB类,在类中添加相应方法用于建立数据库连接、创建表、关闭数据库连接等功能。相关代码如下:
3.3
学生基本信息管理1.学生信息显示在StuDB类中添加一个show()方法,用于显示学生信息,代码如下:3.3
学生基本信息管理2.学生信息添加添加学生信息时,为了保证成绩是在0~100,在StuDB类中先定义一个输入成绩的方法__enterScore(),代码如下:3.3
学生基本信息管理在信息添加、删除和修改时都需要判断学号是否存在,因此在StuDB类中定义一个方法__exists()用于判断学号是否存在,代码如下:3.3
学生基本信息管理在StuDB类中定义一个往表中插入记录的方法,代码如下:3.3
学生基本信息管理在StuDB类中定义一个添加记录的方法,用于接收用户输入的数据,先判断用户输入的学号是否存在,只有要添加的学号不存在时,才把记录添加到表中去,如果学号已经存在则给出相应的提示。代码如下:3.3
学生基本信息管理3.学生信息修改首先在StuDB类中定义一个修改表中记录的方法,代码如下:3.3
学生基本信息管理然后在StuDB类中定义一个修改学生记录的方法,用于接收用户输入的数据,只有当用户输入的学号存在时,才能修改相应的记录。代码如下:3.3
学生基本信息管理4.学生信息删除首先在StuDB类中定义一个删除表中记录的方法,代码如下:3.3
学生基本信息管理然后在StuDB类中定义一个删除学生信息的方法,用以接收用户要删除的学生的学号,如果该学号在表中存在,则删除相应的记录,否则给出相应的提示信息。代码如下:3.3
学生基本信息管理5.数据导入在StuDB类中定义一个方法,用于从文件中将学生信息数据导入到表中去,学生信息数据在文件中的存放格式是一行存放一条记录,各字段之间用逗号分隔,代码如下:3.3
学生基本信息管理6.数据导出在StuDB类中定义一个方法,用于把表中数据导出到文件中去,数据导出格式是一行存放一条记录,记录各字段之间用逗号分隔,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年农村供用热力合同协议
- 2026年购房合同协议2026年
- 2026年美妆品牌形象授权合作合同
- 2026年仓储中心租赁合同协议
- 2026年环保纺织品销售合同协议
- 房屋买卖合同2026年解除条件
- 2026年电商运营服务合同协议
- 2026年客厅装修合同协议
- 2026年人力资源主管竞业限制合同
- 2026年家政雇佣合同
- 2021-2022学年天津市滨海新区九年级上学期物理期末试题及答案
- 江苏省苏州市、南京市九校2025-2026学年高三上学期一轮复习学情联合调研数学试题(解析版)
- 2026年中国医学科学院医学实验动物研究所第三批公开招聘工作人员备考题库及答案详解一套
- 2025年幼儿园教师业务考试试题及答案
- 国家开放大学《Python语言基础》形考任务4答案
- (自2026年1月1日起施行)《增值税法实施条例》重点解读
- 2026春小学科学教科版(2024)三年级下册《4.幼蚕在生长》教学设计
- 管道安装协议2025年
- 2026年内蒙古商贸职业学院单招综合素质考试题库附答案详解
- 2026年护理部工作计划
- 食管癌影像学表现及TNM分期课件
评论
0/150
提交评论