Python3.9数据库SQLite3学起(6)
学生分数管理系统
系统搭建框架如下:
一、几个函数的创建
1、check函数——查重函数
- 与上节那段代码一致,老师讲的不适用,改正我这种笨笨的,用切片,只适用于本例,换了场景就不好用,硬着陆了。
def check(db_name, table_name):
conn = sqlite3.connect(db_name)
inCu = conn.cursor()
sql_ch = f"""select name from sqlite_master where name = '{table_name}'"""
inCu.execute(sql_ch)
tables = inCu.fetchall()
if tables != []:
if table_name in tables[0][0]:
return True
else:
return False
- 这是进入程序,第一步要显示的内容,效果展示如下。
使用的方法代码,最后见总程序。
; 3、search_func函数——查询成绩
def search_func():
myCursor.execute("select * from scores")
return myCursor.fetchall()
- 在每个cursor.execute之后,只能使用cursor.fetchall一次。它”耗尽”光标,获取所有数据,然后无法再次”读取”。因此在主函数中,pause任意键后继续调用主菜单函数。效果如下:
这样,每次只读一条记录,然后一步步把所有的记录读完。
二、主程序的编写
1、创建表的DDL语句,也是先检查再创建
以下几个步骤
(1)连数据库
(2)建游标
(3)利用查重函数判断是否建学生分数表
(4)进入主菜单
(5)开始无限循环
2、while无限循环让用户选择菜单功能
- while无限循环的使用,要注意段落范围。
3、关闭游标、关闭库的连接
- 单纯关闭库,而不关闭游标,它会继续存在,所以,断开库连接前,一定关闭游标
三、回忆错误调试
1、虚拟系统表中查找要创建的表,没有就创建,有就使用
- 这里用了硬代码,目前水平,只能硬来,如图
- 上面图片里面很明显,打印出列表值之后,再切片,然后就可以用来在后面主程序里面来比对了,此处用了两个if语句,出现两种情况,才这么处理的。
(1)只用一个if语句,带上切片的情况:当没有此表,虚拟系统表里面没数据,此处就返回range的溢出报错。
(2)只用一个if语句,不带切片的情况:当数据库里面有此表 ,显示如下图的的报错,说明没用切片,数值不匹配。
; 2、打印输出时,字符乱码的处理
- 一话不说,上图。
- 运行——编辑配置——在输出控制台中模拟终端。不行的话,点了对号,应用,再点上确定。
3、用户录入信息的几点注意
- 字段数量对应,字符串类型转化数值类型。。。
; 4、几个数据库名称的一致
- 最后一晚,一个很简单的错误,可是害我搞了一晚上,那就是出现的数据库名称不止一处,其中一处弄错了,出现稀奇古怪的问题,亲们可以改了试试。
补充:pause和cls
pause的效果,实现“请按任意键继续……”,也就是刚才乱码的地方。
cls是一个老DOS命令了,就是"clear the screen"的缩写。
Original: https://blog.csdn.net/alijunshan/article/details/128154974
Author: 朝兮暮兮
Title: Python3.9数据库SQLite3学起(6)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816857/
转载文章受原作者版权保护。转载请注明原作者出处!