Python连接MySQL数据库实现 增删改查操作

MySQL数据表stu_info结构

属性名

数据类型

可否为空

含 义

idintNO序号(自动增长,主键)
sidvarchar(50)NO学号
namevarchar(100)NO姓名
ageintNO年龄
classesvarchar(100)NO班级
scoreintNO成绩

建表语句:

#在stu1的数据库中创建 学生信息表stu_info
create table stu_info(
id INT PRIMARY KEY  AUTO_INCREMENT,
sid varchar(50) not null,
name varchar(100) not null,
age int not null,
classes varchar(100) not null,
score int not null
);

插入数据:

# 在stu_info中插入一条数据
insert into stu_info values(null ,'0001','张三',18,'Python',99);
insert into stu_info(sid,name,age,classes,score) values('0002','李四',19,'java',99);
insert into stu_info values(null,'0003','ruhua','17','Python','99');

两个.py文件均位于stu_sys目录下

ru_stu_main.py

# 整个项目的主模块,主要负责整个项目的业务逻辑的调用和分配,增删改查的调用

# 数据库版的学生信息管理系统:增删改查
# rt_stu_main:整个项目的主模块,主要负责整个项目的业务逻辑的调用和分配,增删改查的调用
# rt_stu_util:整个项目的工具模块,封装了增删改查的主要功能,以及数据库的相关封装
import stu_sys.rt_stu_util as util

print("*" * 50)
print("欢迎来到学生信息管理系统【v 4.0】")
# 开启while循环提示用户
while (True):
    util.show_menu()
    action_str = input("请输入您要执行的操作编号:")
    if action_str in ["1", "2", "3", "4", "5"]:
        if action_str == "1":
            util.find_all()
        elif action_str == "2":
            util.insert_info()
        elif action_str == "3":
            util.delete_info()
        elif action_str == "4":
            util.update_info()
        elif action_str == "5":
            util.find_info_by_sid()

    elif action_str == "0":
        print("欢迎下次使用学生信息管理系统,good bye!")
        break
    else:
        print("您的输入有误!请重新输入")

rt_stu_util.py

# rt_stu_util:整个项目的工具模块,封装了增删改查的主要功能,以及数据库的相关封装

# rt_stu_util:整个项目的工具模块,封装了增删改查的主要功能,以及数据库的相关封装
import pymysql

def get_conn():
    # 获取数据库连接
    conn = pymysql.connect(
        host="localhost", port=3306,
        user="root", password="root",
        database="test", charset="utf8"
    )
    cursor = conn.cursor()
    return conn, cursor

def close(conn, cursor):
    # 释放资源
    conn.close()
    cursor.close()

def show_menu():
    """封装了功能菜单"""
    print("*" * 50)
    print("请选择您要执行的操作:")
    print("")
    print("1.查询所有学生信息")
    print("2.添加学生信息")
    print("3.删除学生信息")
    print("4.修改学生信息")
    print("5.查询某一位学生信息")
    print("")
    print("0.退出当前学生信息系统")
    print("*" * 50)

def find_all():
    # 查询所有
    # 获取数据库连接和cursor
    conn, cursor = get_conn()
    # 执行查询操作
    sql = "select * from stu_info"
    count = cursor.execute(sql)
    print(f"查询到了{count}条数据:")
    # 表头
    print("#" * 50)
    for title in ["学号", "姓名", "年龄", "班级", "成绩"]:
        print(title, end="\t\t")
    print("")
    # 详细信息
    result = cursor.fetchall()
    for item in result:
        print(item[1] + "\t" + item[2] + "\t\t" + str(item[3]) + "\t\t" + item[4] + "\t\t" + item[5])
    print("#" * 50)
    print("查询完毕!")
    # 释放资源
    close(conn, cursor)

def find_all1():
    conn, cursor = get_conn()
    # 执行查询操作
    sql = "select * from stu_info"
    count = cursor.execute(sql)
    result = cursor.fetchall()
    # 释放资源
    close(conn, cursor)
    return result, count

def insert_info():
    # 添加信息
    # 获取数据库连接和cursor
    conn, cursor = get_conn()
    # 键盘录入要添加的内容
    sid = input("请输入要添加的sid:")
    # 根据sid判断学生是否已存在,如果存在就不能重复添加相同的sid信息
    result, count = find_all1()
    for item in result:
        if sid == item[1]:
            # 已经存在
            print(f"您要添加的学生[{sid}]信息已存在,请核实!")
            break
    else:
        # 不存在
        name = input("请输入要添加的name:")
        age = input("请输入要添加的age:")
        classes = input("请输入要添加的classes:")
        score = input("请输入要添加的score:")
        # 执行添加操作
        sql = "insert into stu_info values(null,%s,%s,%s,%s,%s)"
        count = cursor.execute(sql, [sid, name, age, classes, score])
        if count > 0:
            print("添加成功")
        else:
            print("添加失败")
        # 提交事务(数据库操作时,数据表中数据发生变化时,需要提交事务)
        conn.commit()
    # 释放资源
    close(conn, cursor)

def delete_info():
    # 删除信息
    sid = input("请输入您要删除信息的sid:")
    result = find_all1()[0]
    for item in result:
        if sid == item[1]:
            # 存在sid,直接删除
            # 获取数据库连接和cursor
            conn, cursor = get_conn()
            # 执行删除操作
            sql = "delete from stu_info where sid = %s"
            count = cursor.execute(sql, [sid])
            # 提交事务
            conn.commit()
            if count > 0:
                print(f"sid为{sid}的学生信息删除成功")
            else:
                print(f"sid为{sid}的学生信息删除失败")
            # 释放资源
            close(conn, cursor)
            break
    else:
        print(f"不存在您要删除的学号为[{sid}]的学生信息,请核实!")

def update_info():
    # 修改信息
    sid = input("请输入您要修改信息的sid:")
    result = find_all1()[0]
    for item in result:
        if sid == item[1]:
            # 存在,直接进行修改
            # 获取数据库连接和cursor
            conn, cursor = get_conn()
            # 执行更新操作
            name = input("请输入修改后的name:")
            age = input("请输入修改后的age:")
            classes = input("请输入修改后的classes:")
            score = input("请输入修改后的score:")
            sql = "update stu_info set name=%s, age=%s, classes=%s, score=%s where sid=%s"
            count = cursor.execute(sql, [name, age, classes, score, sid])
            # 提交事务
            conn.commit()
            if count > 0:
                print(f"sid为{sid}的学生信息修改成功")
            else:
                print(f"sid为{sid}的学生信息修改失败")
            # 释放资源
            close(conn, cursor)
            break
    else:
        print(f"不存在您要修改的学号为[{sid}]的学生信息,请核实!")

def find_info_by_sid():
    # 查询某一个
    result = find_all1()[0]
    sid = input("请输入您要查询学生信息的sid:")
    for item in result:
        if sid == item[1]:
            # 获取数据库连接和cursor
            conn, cursor = get_conn()
            # 执行查询操作
            sql = "select * from stu_info where sid = %s"
            count = cursor.execute(sql, [sid])
            # 表头
            print("#" * 50)
            for title in ["学号", "姓名", "年龄", "班级", "成绩"]:
                print(title, end="\t\t")
            print("")
            # 详细信息
            print(item[1] + "\t" + item[2] + "\t\t" + str(item[3]) + "\t\t" + item[4] + "\t\t" + item[5])
            print("#" * 50)
            print("查询完毕!")
            # 释放资源
            close(conn, cursor)
            break
    else:
        print(f"不存在您要查询的学号为[{sid}]的学生信息,请核实!")
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

再见以前说再见

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值