数据采集与预处理,前后端结合案例(有代码),Python连接MySQL,对MySQL的增删改查

Python对MySQL的增删改查

通过Python连接MySQL

"""连接MySQL数据库,并进行增删改查,同时查询了MySQL版本号,并做了动态注册的账号,实现过程:先向userinfo当中添加account、password新字段,接着通过insert插入数据,要注意的是,若是其他字段设置为not null,则必须插入内容。
"""
import pymysql.cursors# 尝试连接数据库
try:connect = pymysql.Connect(host='localhost',port=3307,user='root',password='123456',db='school',charset='utf8')print("数据库连接成功")
except pymysql.err.OperationalError as e:print(f"数据库连接失败: {e}")

创建游标用于解析sql代码

cursor = connect.cursor()

在Python中编写sql语句,并创建userinfo表

其中有ID字段为自动增长、主键、整数,uname字段为字符串、非空,uage字段为整数

sql = """
CREATE TABLE IF NOT EXISTS userinfo(uid INT PRIMARY KEY AUTO_INCREMENT,uname VARCHAR(20) NOT NULL,uage INT
);
"""
cursor.execute(sql)
print("表创建成功")

向表中插入数据

sql2 = "INSERT INTO userinfo(uname, uage) VALUES (%s, %s)"
data1 = ('ann', 18)
data2 = ('alice', 28)
data3 = ('rose', 20)for data in [data1, data2, data3]:cursor.execute(sql2, data)
connect.commit()
print('数据插入成功')

更新数据

将年龄为18的同学姓名改为“oi小鬼”

sql3 = "UPDATE userinfo SET uname = %s WHERE uage = %s"
data_update = ('oi小鬼', 18)
cursor.execute(sql3, data_update)
connect.commit()
print('数据修改成功')

查询数据

其中fetchall()用于返回全部数据、fetchone()用于返回查询结果的第一条数据、fetchmany(n)用于返回查询结果的前n条数据。

sql4 = "SELECT * FROM userinfo"
cursor.execute(sql4)
rows = cursor.fetchall()
for row in rows:print("ID:%s\t姓名:%s\t年龄:%s\t" % (row[0], row[1], row[2]))

查询MySQL数据库版本

cursor.execute("SELECT VERSION()")
version = cursor.fetchone()
print("MySQL数据库版本是:%s" % version)

最后关闭连接释放资源

cursor.close()
connect.close()
print("数据库连接已关闭")

前后端结合小案例

在制作登录网页时,通常会将用户的注册信息存放在后端数据库MySQL中,当登录时,再通过前端发送请求,请求用户的账号密码进行核对,若是密码输入正确,则登录成功,若是错误则无法成功登录。

下面是基于Python的FLASK框架编写的前后端结合注册页面的小案例,用户输入信息点击注册后,用户数据会存入对应的数据库当中。

项目文件结构

在这里插入图片描述

app.py

from flask import Flask, render_template, request, redirect, url_for, flash
import pymysqlapp = Flask(__name__)
app.secret_key = 'your_secret_key'  # 用于闪现消息# 数据库配置
db_config = {'host': 'localhost','port': 3306,'user': 'root','password': 'root','db': 'mydb','charset': 'utf8'
}def get_db_connection():return pymysql.Connect(**db_config)@app.route('/')
def index():return render_template('register.html')@app.route('/register', methods=['POST'])
def register():uname = request.form['uname']account = request.form['account']password = request.form['password']uage = request.form['uage']try:connect = get_db_connection()cursor = connect.cursor()# 插入用户信息sql = "INSERT INTO userinfo (uname, account, password, uage) VALUES (%s, %s, %s, %s)"cursor.execute(sql, (uname, account, password, uage))connect.commit()flash('注册成功!')except pymysql.err.OperationalError as e:flash(f"数据库操作出错: {e}")finally:cursor.close()connect.close()return redirect(url_for('index'))if __name__ == '__main__':app.run(debug=True)

网页页面register.html

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}"><title>用户注册</title>
</head>
<body><div class="container"><h2>用户注册</h2>{% with messages = get_flashed_messages() %}{% if messages %}<ul class="flashes">{% for message in messages %}<li>{{ message }}</li>{% endfor %}</ul>{% endif %}{% endwith %}<form action="/register" method="POST"><label for="uname">姓名:</label><input type="text" id="uname" name="uname" required><label for="account">账号:</label><input type="text" id="account" name="account" required><label for="password">密码:</label><input type="password" id="password" name="password" required><label for="uage">年龄:</label><input type="number" id="uage" name="uage" required><button type="submit">注册</button></form></div>
</body>
</html>

样式风格styles.css

body {font-family: Arial, sans-serif;background-color: #f4f4f4;margin: 0;padding: 20px;
}.container {max-width: 400px;margin: auto;padding: 20px;background: white;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}h2 {text-align: center;
}label {display: block;margin: 10px 0 5px;
}input {width: 100%;padding: 8px;margin-bottom: 10px;
}button {width: 100%;padding: 10px;background-color: #28a745;color: white;border: none;border-radius: 5px;
}button:hover {background-color: #218838;
}.flashes {list-style-type: none;padding: 0;color: red;
}

案例运行

网页效果展示

在这里插入图片描述

注册测试

在这里插入图片描述

点击注册后:

在这里插入图片描述

检查后端数据库中是否已经存在用户的注册信息

在这里插入图片描述

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

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

相关文章

mysqldump使用cmd窗口和powersell窗口导出sql中文乱码的问题

项目场景 我在使用Mariadb数据库更新数据的时候&#xff0c;由于数据库的表格中含有中文&#xff0c;在使用mysqldump导出sql语句的时候&#xff0c;中文显示乱码&#xff0c;如下图所示&#xff1a; 环境描述 系统&#xff1a;windows10数据库&#xff1a; Mariadb -10.6.16…

空间解析几何2:空间中两线段/直线的距离【附MATLAB代码】

目录 理论公式 MATLAB代码 理论公式 MATLAB代码 公式实现 function [dis,P,Q,t1,s1]line2LineDistance(A1,B1,C1,D1) %求两线段的最短距离 % input % A1,B1为线段一的两端点 C1,D1为线段二的两端点 % output % dis,为两线段的最短距离&#xff0c;P,Q为距离最短时在两线段上…

综述论文“Towards Personalized Federated Learning”分享

综述论文“Towards Personalized Federated Learning”分享 文章目录 综述论文“Towards Personalized Federated Learning”分享I. 引言A. 联邦学习的分类B. 个性化联邦学习的动机C. 贡献 II. 个性化联邦学习的策略策略I&#xff1a;全局模型个性化策略II&#xff1a;学习个性…

简单多状态dp第一弹 leetcode -面试题17.16.按摩师 -213.打家劫舍II

a​​​​​​​面试题 17.16. 按摩师 按摩师 题目: 分析: 使用动态规划解决 状态表示: dp[i] 表示&#xff1a;选择到 i 位置时&#xff0c;此时的最长预约时长。 但是我们这个题在 i 位置的时候&#xff0c;会面临 选择 或者 不选择 两种抉择&#xff0c;所依赖的状态需要…

集成学习详细介绍

以下内容整理于&#xff1a; 斯图尔特.罗素, 人工智能.现代方法 第四版(张博雅等译)机器学习_温州大学_中国大学MOOC(慕课)XGBoost原理介绍------个人理解版_xgboost原理介绍 个人理解-CSDN博客 集成学习(ensemble)&#xff1a;选择一个由一系列假设h1, h2, …, hn构成的集合…

C++/Qt 集成 AutoHotkey

C/Qt 集成 AutoHotkey 前言AutoHotkey 介绍 方案一&#xff1a;子进程启动编写AutoHotkey脚本准备 AutoHotkey 运行环境编写 C/Qt 代码 方案二&#xff1a;显式动态链接方案探索编译动态链接库集成到C工程关于AutoHotkeyDll.dll中的函数原型 总结 前言 上一篇介绍了AutoHotkey…

从理论再到实践:AI大模型学习路线,提升核心竞争力,看这篇就够了

一、初聊大模型 1、什么是大模型&#xff1f; 大模型&#xff0c;通常指的是在人工智能领域中的大型预训练模型。你可以把它们想象成非常聪明的大脑&#xff0c;这些大脑通过阅读大量的文本、图片、声音等信息&#xff0c;学习到了世界的知识。这些大脑&#xff08;模型&#…

基于 Qwen2.5-Coder 模型和 CrewAI 多智能体框架,实现智能编程系统的实战教程

9 月 19 日&#xff0c;阿里开源了 Qwen2.5 系列大模型全家桶&#xff1a;除常规的语言模型 Qwen2.5 之外&#xff0c;还发布了专门针对编程的Qwen2.5-Coder模型和数学的 Qwen2.5-Math 模型&#xff0c;并且针对每个模型都提供了不同规模参数版本&#xff0c;包括&#xff1a; …

CSP-CCF★★★201909-2小明种苹果(续)★★★

一、问题描述 二、解答 关键&#xff1a;判断是否发生苹果掉落&#xff0c;使用flag[]数组来标记&#xff0c;1为掉落&#xff0c;0为没有掉落&#xff0c;这样也是为了后续比较连续三棵树是否掉落 误区&#xff1a;用最后一次正数&#xff08;即最后一次统计苹果个数&#x…

芯片开发(1)---BQ76905---底层参数配置

主要开发思路:AFE主要是采集、保护功能、均衡&#xff0c;所以要逐一去配置芯片的寄存器 采集、均衡功能主要是配置引脚 保护功能主要是参数寄存器配置&#xff0c;至于如何使用命令修改寄存器参数该系列芯片提供了子命令和直接命令两种方式 BQ76905的管脚配置 I、参数配置 …

AI赋能篇:万物皆可播,AI视频直播新趋势,轻松打造24h不间断开播!

AI赋能篇&#xff1a;万物皆可播&#xff0c;AI视频直播新趋势&#xff0c;轻松打造24h不间断开播&#xff01; 在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度渗透到我们生活的每一个角落&#xff0c;其中&#xff0c;AI视频直播作为…

工控一体机在高精度玻璃检测机中的应用

工控一体机在高精度玻璃检测机中的应用主要体现在以下几个方面&#xff1a; 一、数据采集与处理 工控一体机作为工业控制计算机&#xff0c;能够高效采集来自高精度玻璃检测机中各种传感器和执行器的数据。这些数据包括但不限于玻璃表面的图像信息、厚度、温度、光学特性等。…

05 基于STM32的DHT11温湿度获取及OLED显示(库函数)

本专栏所有源资料都免费获取,无任何隐形消费。 注意事项:STM32仿真会存在各种各样BUG,且尽量按照同样仿真版本使用。本专栏所有的仿真都采用PROTEUS8.15。 本文已经配置好STM32F103C8T6系列,在PROTUES仿真里,32单片机一般只用一种型号,如需其他型号,可改名。 本次功能…

初中数学证明集锦之三角形内角和

导言 非常喜欢数学那套&#xff0c;由简单到复杂&#xff0c;逐层递进的证明之美。 既证了&#xff0c;而且明了 &#x1f603; 让人不得不信服&#xff01; 由人教版教材看到的三角形内角和180度的证明法&#xff0c;觉得现在课本不单传播了知识&#xff0c;而且点睛数学之…

STM32CubeIDE | 使用HAL库的ADC读取内部传感器温度

1、cubemx配置 1.1、系统配置 1.2、GPIO配置 PB2设置为“GPIO_Output” user label设置为“LED” 1.3、串口配置 模式选择为“Asynchronous”&#xff0c;其他默认 1.4、时钟树配置 全部保持默认 2、ADC配置 通道选择“Temperature Sensor Channel”&#xff0c;其他默认 …

一个 ospf 的 hub-spoke 例子

一、拓扑&#xff1a; 要求&#xff1a;利用 ospf igp配置&#xff0c;使两个 Spoke 之间的流量经过 Hub 端 二、配置思路&#xff1a; 1、基本环境搭建&#xff1a; SW1 起 vlan 10、20、30&#xff1b; 配置 G0/0/1、2、3 接口分别为 hybrid 类型&#xff08;默认&…

自建数据库VS云数据库:从《中国数据库前世今生》看未来数据管理的抉择

自建数据库VS云数据库&#xff1a;从《中国数据库前世今生》看未来数据管理的抉择 在数字化时代的滚滚洪流中&#xff0c;数据库作为核心数据管理工具&#xff0c;始终扮演着至关重要的角色。最近观看了纪录片《中国数据库前世今生》&#xff0c;让我对数据库技术的发展有了更…

cesium.js 入门到精通(5-2)

在cesium 的配置中 有一些参数 可以配置地图的显示 显示出 水的动态显示 山的效果 相当于一些动画显示的效果 var viewer new Cesium.Viewer("cesiumContainer", {infoBox: false,terrainProvider: await Cesium.createWorldTerrainAsync({requestWaterMask: tru…

漏洞复现_永恒之蓝

1.概述 永恒之蓝&#xff08;EternalBlue&#xff09;是一个影响Windows操作系统的远程代码执行漏洞&#xff0c;编号为CVE-2017-0144&#xff0c;最初由美国国家安全局&#xff08;NSA&#xff09;开发并利用&#xff0c;后来被黑客组织Shadow Brokers泄露。该漏洞存在于SMBv…