import sqlite3
#声明一个数据模型类:只包含属性,不包含操作属性的函数
class StudentModel(object):
def __init__(self, db_name, table_name, field_name, field_age, field_score, field_id):
self.db_name = db_name
self.table_name = table_name
self.field_name = field_name
self.field_age = field_age
self.field_score = field_score
self.field_id = field_id
#声明一个工具类,工具类一般只包含操作函数,不包含属性
class DBManager(object):
#定义一个创建库和游标的函数
#stu_obj:StudentModel类生成的对象
#stu_obj.db_name:StudentModel类中的db_name属性,对应的就是数据库名称
def create_connet_and_cursor(self,stu_obj):
self.connet=sqlite3.connect(stu_obj.db_name)
self.cursor=self.connet.cursor()
#定义一个创建表的函数
def create_table(self,stu_obj):
create_sql="create table if not exists "+stu_obj.table_name+"(%s INTEGER PRIMARY KEY UNIQUE,%s TEXT,%s TEXT,%s TEXT )"%(stu_obj.field_id,stu_obj.field_name,stu_obj.field_age,stu_obj.field_score)
self.cursor.execute(create_sql)
#定义一个添加数据的函数
def insert_student_info(self,stu_obj):
name=input('请输入要添加的学员姓名:')
age=input('请输入要添加的学员年龄:')
score=input('请输入要添加的学员的成绩:')
insert_sql="insert into "+stu_obj.table_name+"(%s,%s,%s) values ('%s','%s','%s')"%(stu_obj.field_name,stu_obj.field_age,stu_obj.field_score,name,age,score)
self.cursor.execute(insert_sql)
#定义一个查询数据库数据总量的函数
def get_total_count(self,stu_obj):
select_sql="select count(*) from %s"%(stu_obj.table_name)
res=self.cursor.execute(select_sql)
count=res.fetchone()[0]
return count
#定义一个能否查询到ID对应数据的函数
def get_id_true_or_false(self,stu_obj,number):
select_number="select * from %s where id=%d"%(stu_obj.table_name,number)
res=self.cursor.execute(select_number)
result=res.fetchall()
return len(result)
#定义一个查询数据的函数
def select_student_info(self,stu_obj):
count = self.get_total_count(stu_obj)
if count!=0:
select_sql=" select * from "+stu_obj.table_name
result=self.cursor.execute(select_sql)
for id,name,age,score in result:
print(id,'',name,age,score)
else:
print('学员信息为空,无法查询')
#定义一个更改数据的函数
def update_student_info(self,stu_obj):
count=self.get_total_count(stu_obj)
if count!=0:
self.select_student_info(stu_obj)
number=int(input('请输入要修改的的学员的编号:'))
while self.get_id_true_or_false(stu_obj,number)==False:
number=int(input('编号输入错误,请重新输入要修改的的学员的编号:'))
name=input('请输入新的姓名:')
age=input('请输入新的年龄:')
score=input('请输入新的分数:')
update_sql="update "+stu_obj.table_name+" set %s='%s',%s='%s',%s='%s' where %s=%s"%(stu_obj.field_name,name,stu_obj.field_age,age,stu_obj.field_score,score,stu_obj.field_id,number)
self.cursor.execute(update_sql)
else:
print('学员信息为空,无法修改')
#定义删除数据的函数
def delete_test(self,stu_obj):
count=self.get_total_count(stu_obj)
if count!=0:
self.select_student_info(stu_obj)
print('1-根据学员序号删除学员信息')
print('2-删除所有学员信息')
select_number=int(input('请输入你要操作的序号:'))
while select_number!=1 and select_number!=2:
select_number=int(input('序号输入错误,请重新输入你要操作的序号:'))
if select_number==1:
number=int(input('请输入要删除的学员的序号:'))
while self.get_id_true_or_false(stu_obj,number)==False:
number=int(input('序号输入错误,请重新输入要删除的学员序号:'))
delete_sql="delete from %s where id=%d"%(stu_obj.table_name,number)
else:
delete_sql = "delete from %s"%(stu_obj.table_name)
self.cursor.execute(delete_sql)
else:
print('学员信息为空,无法删除')
#定义一个关闭数据库连接和游标的函数
def close_db_and_commit(self):
self.connet.commit()
self.cursor.close()
self.connet.close()
if __name__ == '__main__':
student=StudentModel('Student_Plus.db','student','name','age','score','id')
db_manager=DBManager()
db_manager.create_connet_and_cursor(student)
db_manager.create_table(student)
while True:
print('''
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
''')
select_number=int(input('请选择操作序号:'))
while select_number<0 or select_number>4:
select_number = int(input('输入错误,请重新选择操作序号:'))
if select_number==1:
db_manager.insert_student_info(student)
elif select_number==2:
db_manager.update_student_info(student)
elif select_number==3:
db_manager.select_student_info(student)
elif select_number==4:
db_manager.delete_test(student)
else:
break
db_manager.close_db_and_commit()
运行结果如下:
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
请选择操作序号:1
请输入要添加的学员姓名:张三
请输入要添加的学员年龄:20
请输入要添加的学员的成绩:99
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
请选择操作序号:1
请输入要添加的学员姓名:李四
请输入要添加的学员年龄:21
请输入要添加的学员的成绩:100
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
请选择操作序号:1
请输入要添加的学员姓名:王五
请输入要添加的学员年龄:22
请输入要添加的学员的成绩:98
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
请选择操作序号:3
1 张三 20 99
2 李四 21 100
3 王五 22 98
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
请选择操作序号:2
1 张三 20 99
2 李四 21 100
3 王五 22 98
请输入要修改的的学员的编号:3
请输入新的姓名:王二
请输入新的年龄:19
请输入新的分数:98
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
请选择操作序号:4
1 张三 20 99
2 李四 21 100
3 王二 19 98
1-根据学员序号删除学员信息
2-删除所有学员信息
请输入你要操作的序号:1
请输入要删除的学员的序号:3
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
请选择操作序号:3
1 张三 20 99
2 李四 21 100
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
请选择操作序号:4
1 张三 20 99
2 李四 21 100
1-根据学员序号删除学员信息
2-删除所有学员信息
请输入你要操作的序号:1
请输入要删除的学员的序号:1
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
请选择操作序号:3
2 李四 21 100
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
请选择操作序号:4
2 李四 21 100
1-根据学员序号删除学员信息
2-删除所有学员信息
请输入你要操作的序号:2
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
请选择操作序号:2
学员信息为空,无法修改
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
请选择操作序号:3
学员信息为空,无法查询
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
请选择操作序号:4
学员信息为空,无法删除
1-添加学员信息
2-修改学员信息
3-查询学员信息
4-删除学员信息
0-退出程序
请选择操作序号:0
Process finished with exit code 0