3.Python-用Python实现MySQL数据库的增删改查

news2024/11/23 20:05:43

题记

        用python实现mysql数据库的增删改查,以下是具体的代码和操作步骤

安装flask模块

        pip install flask

安装mysql.connector模块

        pip install mysql-connector-python

编写app.py文件 

        app.py文件如下: 

为什么显示不完整???
# jsonify是Flask提供的用于生成JSON响应的函数
# mysql.connector是一个用于连接和操作MySQL数据库的Python库
from flask import Flask, request, render_template, jsonify
import mysql.connector

app = Flask(__name__)

# 连接到MySQL数据库
# 填写host,用户名,密码,数据库名
db = mysql.connector.connect(
    host="localhost",
    user="root",
    password="123456",
    database="test"
)

# 创建游标对象
cursor = db.cursor()

# 创建表格(如果不存在)
cursor.execute("CREATE TABLE IF NOT EXISTS students (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT)")

@app.route('/')
def index():
    # 查询数据库中的所有数据,cursor是用来执行SQL语句的游标对象
    # cursor.fetchall()方法用于获取查询结果的所有行数据,并将其存储在students变量中
    # render_template函数用来渲染index.html模板文件
    # 在index.html中,通过在模板中使用{% for student in students %}和{% endfor %}来遍历students列表
    cursor.execute("SELECT * FROM students")
    students = cursor.fetchall()
    return render_template('index.html', students=students)

@app.route('/add', methods=['POST'])
def add():
    # request.form属性可以获取表单数据
    name = request.form['name']
    age = request.form['age']

    # 向数据库插入数据
    # %s是占位符,用于表示后面的值将会被替换
    # values变量是一个元组,包含了要插入的name和age的值
    # 使用db.commit()方法提交事务,将数据真正地插入到数据库中
    sql = "INSERT INTO students (name, age) VALUES (%s, %s)"
    values = (name, age)
    cursor.execute(sql, values)
    db.commit()

    return "数据已成功添加到数据库!"

# <int:id>用于指定id
@app.route('/delete/<int:id>', methods=['GET'])
def delete(id):
    # 删除指定ID的数据
    sql = "DELETE FROM students WHERE id = %s"
    values = (id,)
    cursor.execute(sql, values)
    db.commit()

    return "数据已成功删除!"

@app.route('/update/<int:id>', methods=['GET'])
def update1(id):
    sql = "SELECT * FROM students WHERE id = %s"
    values = (id,)
    cursor.execute(sql, values)
    # 使用cursor.fetchone()方法获取查询结果的第一行数据,并将其存储在student变量中
    student = cursor.fetchone()
    return render_template('update.html',student=student)

@app.route('/update/<int:id>', methods=['POST'])
def update(id):
    name = request.form['name']
    age = request.form['age']

    # 更新指定ID的数据
    sql = "UPDATE students SET name = %s, age = %s WHERE id = %s"
    values = (name, age, id)
    cursor.execute(sql, values)
    db.commit()

    return "数据已成功更新!"

@app.route('/select/<int:id>', methods=['GET'])
def select(id):
    # 查询指定ID的数据
    sql = "SELECT * FROM students WHERE id = %s"
    values = (id,)
    cursor.execute(sql, values)
    student = cursor.fetchone()

    # jsonify()函数将student转换为JSON格式
    if student:
        return jsonify(student)
    else:
        return "未找到匹配的数据!"

if __name__ == '__main__':
    app.run()
# jsonify是Flask提供的用于生成JSON响应的函数
# mysql.connector是一个用于连接和操作MySQL数据库的Python库
from flask import Flask, request, render_template, jsonify
import mysql.connector

app = Flask(__name__)

# 连接到MySQL数据库
# 填写host,用户名,密码,数据库名
db = mysql.connector.connect(
    host="localhost",
    user="root",
    password="123456",
    database="test"
)

# 创建游标对象
cursor = db.cursor()

# 创建表格(如果不存在)
cursor.execute("CREATE TABLE IF NOT EXISTS students (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT)")

@app.route('/')
def index():
    # 查询数据库中的所有数据,cursor是用来执行SQL语句的游标对象
    # cursor.fetchall()方法用于获取查询结果的所有行数据,并将其存储在students变量中
    # render_template函数用来渲染index.html模板文件
    # 在index.html中,通过在模板中使用{% for student in students %}和{% endfor %}来遍历students列表
    cursor.execute("SELECT * FROM students")
    students = cursor.fetchall()
    return render_template('index.html', students=students)

@app.route('/add', methods=['POST'])
def add():
    # request.form属性可以获取表单数据
    name = request.form['name']
    age = request.form['age']

    # 向数据库插入数据
    # %s是占位符,用于表示后面的值将会被替换
    # values变量是一个元组,包含了要插入的name和age的值
    # 使用db.commit()方法提交事务,将数据真正地插入到数据库中
    sql = "INSERT INTO students (name, age) VALUES (%s, %s)"
    values = (name, age)
    cursor.execute(sql, values)
    db.commit()

    return "数据已成功添加到数据库!"

# <int:id>用于指定id
@app.route('/delete/<int:id>', methods=['GET'])
def delete(id):
    # 删除指定ID的数据
    sql = "DELETE FROM students WHERE id = %s"
    values = (id,)
    cursor.execute(sql, values)
    db.commit()

    return "数据已成功删除!"

@app.route('/update/<int:id>', methods=['GET'])
def update1(id):
    sql = "SELECT * FROM students WHERE id = %s"
    values = (id,)
    cursor.execute(sql, values)
    # 使用cursor.fetchone()方法获取查询结果的第一行数据,并将其存储在student变量中
    student = cursor.fetchone()
    return render_template('update.html',student=student)

@app.route('/update/<int:id>', methods=['POST'])
def update(id):
    name = request.form['name']
    age = request.form['age']

    # 更新指定ID的数据
    sql = "UPDATE students SET name = %s, age = %s WHERE id = %s"
    values = (name, age, id)
    cursor.execute(sql, values)
    db.commit()

    return "数据已成功更新!"

@app.route('/select/<int:id>', methods=['GET'])
def select(id):
    # 查询指定ID的数据
    sql = "SELECT * FROM students WHERE id = %s"
    values = (id,)
    cursor.execute(sql, values)
    student = cursor.fetchone()

    # jsonify()函数将student转换为JSON格式
    if student:
        return jsonify(student)
    else:
        return "未找到匹配的数据!"

if __name__ == '__main__':
    app.run()

编写index.html文件 

        index.html文件要放在templates文件夹下

        index.html文件如下: 

<!DOCTYPE html>
<html>
<head>
    <title>学生管理</title>
</head>
<body>
    <h1>学生管理</h1>
    <table>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>操作</th>
        </tr>
        {% for student in students %}
        <tr>
            <td>{{ student[0] }}</td>
            <td>{{ student[1] }}</td>
            <td>{{ student[2] }}</td>
            <td>
                <a href="/delete/{{ student[0] }}">删除</a>
                <a href="/update/{{ student[0] }}">修改</a>
                <a href="/select/{{ student[0] }}">搜索</a>
            </td>
        </tr>
        {% endfor %}
    </table>
    <br>
    <h2>新增学生</h2>
    <form action="/add" method="POST">
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name"><br><br>
        <label for="age">年龄:</label>
        <input type="text" id="age" name="age"><br><br>
        <input type="submit" value="Add">
    </form>
</body>
</html>

 编写update.html文件

        update文件如下: 

<!DOCTYPE html>
<html>
<head>
    <title>修改学生</title>
</head>
<body>
    <h1>修改学生</h1>
    <!--{{ student[0] }}是一个占位符,将会被具体的学生ID替换-->
    <form action="/update/{{ student[0] }}" method="POST">
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name"><br><br>
        <label for="age">年龄:</label>
        <input type="text" id="age" name="age"><br><br>
        <input type="submit" value="Add">
    </form>
</body>
</html>

执行程序

        启动命令:

        python app.py 

        访问地址:

        localhost:5000 

展示图 

 觉得有用可以收藏或点赞!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1092151.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring】事务传播机制

事务传播机制 一. 事务传播机制是什么二. 为什么需要事务传播机制三. 事务传播机制有哪些四. Spring 事务传播机制演示1. ⽀持当前事务&#xff08;REQUIRED&#xff09;2. 不支持当前事务&#xff08;REQUIRES_NEW&#xff09;3. 不⽀持当前事务&#xff0c;NEVER 抛异常4. NE…

订单型企业经营分析指标大全(ODOO15/16)

ODOO-ERP搭建完成之后&#xff0c;我们重点是帮客户建立经营分析能力&#xff0c;以下是针对订单型企业的经营分析指标&#xff0c;涵盖业务运营的监控、资产构成、利润、盈亏点计算、资产运营效率等各方面&#xff0c;并且持续完善。 有些企业不重视&#xff0c;觉得自己企业小…

WebAPI+EF连接SQL Server数据库

右击解决方案-添加-新建项目-选择“类库&#xff08;.NET Framework&#xff09;”,新建的项目取名叫WebApi1.EF 添加EF&#xff1a; 新建一个ADO实体数据模型 选择DBFirst 数据源选择MySql 填写数据库地址及账号密码 选择实体框架版本 选择在数据库中的表User 到此配置完成&am…

对称加密和非对称加密以及CA证书

对称加密 对称加密只用到了公匙,这个公匙是消息的发送方和消息的接收方共享的,也就是消息发送方使用这个公匙对消息加密,然后接收方使用公匙对消息解密,最典型的例子比如像 encrypt 加密,比如我们有个 springboot 应用,需要对 application.yml 文件里的密码做加密,我们…

操作系统备考学习 day8 (2.4.1 ~ 2.4.4)

操作系统备考学习 day8 第二章 进程与线程2.4 死锁2.4.1 死锁的基本概念死锁产生的必要条件死锁什么时候会发生死锁的处理策略 2.4.2 死锁预防破坏互斥条件破坏不剥夺条件破坏请求和保持条件破坏循环等待条件 2.4.3 避免死锁银行家算法 2.4.4 死锁的检测和解除死锁的检测死锁的…

faster python之ctypes调用so/dll

目录 .so和.dll文件将go代码编译为动态链接库将C代码编译成动态链接库 ctypes库基础数据类型使用方法基本数据类型数组类型指针类型结构体类型嵌套结构体结构体数组结构体指针结构体指针数组 ctypes加载DLL的方式1. 使用 CDLL 类2. 使用 WinDLL 类&#xff08;Windows特定&…

【LeetCode高频SQL50题-基础版】打卡第8天:第41~45题

文章目录 【LeetCode高频SQL50题-基础版】打卡第8天&#xff1a;第41~45题⛅前言好友申请II&#x1f512;题目&#x1f511;题解 2016年的投资&#x1f512;题目&#x1f511;题解 部门工资前三高的所有员工&#x1f512;题目&#x1f511;题解 修复表中的名字&#x1f512;题目…

深入JTS事务引擎:理论与实践相结合,掌握高效事务管理的秘诀

事务是可靠应用程序的构建块 如果您阅读过任何有关 J2EE 的介绍性文章或者书籍&#xff0c;那么就会发现&#xff0c;只有一小部分资料是专门针对 Java Transaction Service&#xff08;JTS&#xff09;或 Java Transaction API&#xff08;JTA&#xff09;的。这并不是因为 J…

[补题记录] Atcoder Beginner Contest 295(E)

URL&#xff1a;https://atcoder.jp/contests/abc295 目录 E Problem/题意 Thought/思路 Code/代码 E Problem/题意 给定长度为 N 的数组 A。进行如下操作&#xff1a; 若 Ai 0&#xff0c;将 Ai 等概率地变为 1 ~ M 中的任意一个数&#xff1b;对 A 排序&#xff1b; …

SQL及数据库基础知识点总结

一. SQL&#xff08;Structured Query Language&#xff09;&#xff1a; 结构化查询语言。SQL语法不区分关键字的大小写&#xff0c;多条SQL语句必须以&#xff1b;分隔。 二. SQL的作用&#xff1a; SQL可以访问和处理数据库&#xff0c;包括数据的增删改查&#xff08;插…

【实战项目之网页聊天室】

目录 项目背景 需求分析 1.用户管理模块 注册 登录 2.主界面 个人信息模块 会话列表模块 好友列表模块 消息区域模块 消息传输模块 添加好友模块 编写项目 1.创建项目添加依赖 2.配置项目信息 3.功能实现 用户管理模块 个人信息模块 好友列表模块 消息区…

FPmarkets:MT4中Renko图表工具有哪些?怎么用

以下FPmarkets总结的在MT4中使用Renko图表的最有趣的工具&#xff1a; 第一个是KT Renko实时图表指标&#xff0c;这是一个简单的指示器&#xff0c;仅显示砖块&#xff0c;未添加其他元素&#xff0c;因此与其他自定义指标和顾问兼容。 第二个是Renko Live Chart开发人员提供…

Kafka消费者使用案例

本文代码链接&#xff1a;https://download.csdn.net/download/shangjg03/88422633 1.消费者和消费者群组 在 Kafka 中&#xff0c;消费者通常是消费者群组的一部分&#xff0c;多个消费者群组共同读取同一个主题时&#xff0c;彼此之间互不影响。Kafka 之所以要引入消费者群组…

源码选择指南:比较流行的同城外卖跑腿系统解决方案

随着现代生活的快节奏和数字化转型的浪潮&#xff0c;外卖和跑腿服务成为了不可或缺的一部分。不仅在城市&#xff0c;就连小镇和乡村也可以享受到这些便捷的服务。如果您计划开发或改进一个同城外卖和跑腿系统&#xff0c;选择适合的源码解决方案是至关重要的。在本文中&#…

Jenkins 结合 ANT 发送测试报告

目录 全局变量配置 新建任务 插件安装 HTML 报告配置 邮件配置 全局变量配置 点击 ManageJenkins进入Jenkins 管理 点击 Global Tool Configuration 进入全局变量配置 配置 Ant &#xff0c;Name 自己定义一个比较好理解的名称。 去掉 Install automatically 勾选&#x…

毕业设计选题Java+springboot校园新闻资讯系统源码 开题 lw 调试

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

VBA技术资料MF69:添加和删除工作表中的分页符

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

黑马JVM总结(三十三)

&#xff08;1&#xff09;运行期优化-逃逸分析 在运行期间java虚拟机会对我们代码做一些优化&#xff0c;时间会变短&#xff1a; 字节码反复调用&#xff0c;到达一定的阈值&#xff0c;会启用编译器对自己饿吗编译执行&#xff0c;从0层上升为1层C1 C1和C2他俩的区别是解释…

C语言进阶第六课-----------字符分类函数和内存的开辟

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

【Python从入门到进阶】39、使用Selenium自动验证滑块登录

接上篇《38、selenium关于Chrome handless的基本使用》 上一篇我们介绍了selenium中有关Chrome的无头版浏览器Chrome Handless的使用。本篇我们使用selenium做一些常见的复杂验证功能&#xff0c;首先我们来讲解如何进行滑块自动验证的操作。 一、测试用例介绍 我们要通过sel…