数据存储:一文掌握存储数据到mysql的详细使用
文章目录
- 一、环境准备
- 1.1 安装MySQL数据库
- 1.2 安装Python MySQL驱动
- 二、连接到MySQL数据库
- 三、执行基本的CRUD操作
- 3.1 创建(Create):插入数据
- 3.2 读取(Read):查询数据
- 3.3 更新(Update):更新数据
- 3.4 删除(Delete):删除数据
- 3.5 完整代码示例
- 四、使用上下文管理器简化连接和游标管理
- 五、处理事务
- 六、使用ORM框架(推荐)
- 七、最佳实践
- 八、总结
在数据采集、处理和存储过程中,MySQL作为一种广泛使用的关系型数据库管理系统,因其高性能、可靠性和易用性而备受青睐。Python提供了多种库来连接和操作MySQL数据库,其中最常用的是mysql-connector-python和PyMySQL。本文将详细介绍如何使用Python连接MySQL数据库,执行基本的CRUD(创建、读取、更新、删除)操作,并提供相应的代码示例。
一、环境准备
1.1 安装MySQL数据库
确保已经在系统中安装并运行了MySQL数据库。可以从 MySQL官方网站 下载并安装适合你操作系统的版本。
1.2 安装Python MySQL驱动
使用pip安装mysql-connector-python或PyMySQL库。这里以PyMySQL为例:
pip install PyMySQL
二、连接到MySQL数据库
首先,需要使用Python代码连接到MySQL数据库。以下是使用PyMySQL连接数据库的基本步骤:
import pymysql# 连接参数
connection = pymysql.connect(host='localhost', # 数据库主机地址user='your_username', # 数据库用户名password='your_password',# 数据库密码database='your_database',# 要连接的数据库名称charset='utf8mb4', # 字符集cursorclass=pymysql.cursors.DictCursor # 返回字典类型的结果
)try:with connection.cursor() as cursor:# 在此处执行SQL语句pass
finally:connection.close()
三、执行基本的CRUD操作
3.1 创建(Create):插入数据
使用INSERT INTO语句向表中插入数据。
import pymysqlconnection = pymysql.connect(host='localhost',user='your_username',password='your_password',database='test_db',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor
)try:with connection.cursor() as cursor:sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"cursor.execute(sql, ('张三', 28, 'zhangsan@example.com'))connection.commit() # 提交事务
finally:connection.close()
3.2 读取(Read):查询数据
使用SELECT语句从表中查询数据。
import pymysqlconnection = pymysql.connect(host='localhost',user='your_username',password='your_password',database='test_db',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor
)try:with connection.cursor() as cursor:sql = "SELECT id, name, age, email FROM users WHERE age > %s"cursor.execute(sql, (25,))results = cursor.fetchall()for row in results:print(row)
finally:connection.close()
3.3 更新(Update):更新数据
使用UPDATE语句修改表中的数据。
import pymysqlconnection = pymysql.connect(host='localhost',user='your_username',password='your_password',database='test_db',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor
)try:with connection.cursor() as cursor:sql = "UPDATE users SET age = %s WHERE name = %s"cursor.execute(sql, (29, '张三'))connection.commit()
finally:connection.close()
3.4 删除(Delete):删除数据
使用DELETE语句删除表中的数据。
import pymysqlconnection = pymysql.connect(host='localhost',user='your_username',password='your_password',database='test_db',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor
)try:with connection.cursor() as cursor:sql = "DELETE FROM users WHERE name = %s"cursor.execute(sql, ('李四',))connection.commit()
finally:connection.close()
3.5 完整代码示例
以下是一个完整的Python脚本,演示了如何连接MySQL数据库并执行CRUD操作。
import pymysql# 数据库连接配置
config = {'host': 'localhost', # 数据库主机地址'port': 3306, # 数据库端口,默认3306'user': 'your_username', # 数据库用户名'password': 'your_password',# 数据库密码'database': 'test_db', # 要连接的数据库名称'charset': 'utf8mb4', # 字符集'cursorclass': pymysql.cursors.DictCursor # 返回字典类型的结果
}def create_database(cursor):"""创建数据库"""cursor.execute("CREATE DATABASE IF NOT EXISTS test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;")print("数据库创建成功或已存在。")def create_table(cursor):"""创建表"""create_table_sql = """CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT,email VARCHAR(150) UNIQUE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"""cursor.execute(create_table_sql)print("表创建成功或已存在。")def insert_data(cursor, connection, data):"""插入数据"""sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"cursor.execute(sql, data)connection.commit()print(f"插入一条数据,ID: {cursor.lastrowid}")def query_data(cursor):"""查询数据"""sql = "SELECT id, name, age, email FROM users WHERE age > %s"cursor.execute(sql, (25,))results = cursor.fetchall()print("查询结果:")for row in results:print(row)def update_data(cursor, connection, user_id, new_age):"""更新数据"""sql = "UPDATE users SET age = %s WHERE id = %s"cursor.execute(sql, (new_age, user_id))connection.commit()print(f"更新ID为{user_id}的用户年龄为{new_age}")def delete_data(cursor, connection, user_id):"""删除数据"""sql = "DELETE FROM users WHERE id = %s"cursor.execute(sql, (user_id,))connection.commit()print(f"删除ID为{user_id}的用户")def main():try:# 连接到MySQL服务器connection = pymysql.connect(**config)with connection.cursor() as cursor:# 创建数据库create_database(cursor)# 使用刚创建的数据库connection.select_db('test_db')# 创建表create_table(cursor)# 插入数据users = [('张三', 28, 'zhangsan@example.com'),('李四', 34, 'lisi@example.com'),('王五', 23, 'wangwu@example.com')]for user in users:insert_data(cursor, connection, user)# 查询数据print("\n所有用户信息:")query_data(cursor)# 更新数据update_data(cursor, connection, 1, 29)# 查询更新后的数据print("\n更新后的用户信息:")query_data(cursor)# 删除数据delete_data(cursor, connection, 2)# 查询删除后的数据print("\n删除后的用户信息:")query_data(cursor)except pymysql.MySQLError as e:print(f"发生错误: {e}")finally:if 'connection' in locals() and connection.open:connection.close()print("\n数据库连接已关闭。")if __name__ == "__main__":main()
四、使用上下文管理器简化连接和游标管理
为了简化代码和提高可读性,可以使用上下文管理器(with语句)来自动管理数据库连接和游标。
import pymysqlconnection_params = {'host': 'localhost','user': 'your_username','password': 'your_password','database': 'test_db','charset': 'utf8mb4','cursorclass': pymysql.cursors.DictCursor
}sql_insert = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
data = ('王五', 25, 'wangwu@example.com')with pymysql.connect(**connection_params) as connection:with connection.cursor() as cursor:cursor.execute(sql_insert, data)connection.commit()
五、处理事务
事务是确保数据库操作原子性、一致性、隔离性和持久性(ACID)的重要机制。PyMySQL支持事务管理,可以通过commit()和rollback()方法来控制事务。
import pymysqlconnection_params = {'host': 'localhost','user': 'your_username','password': 'your_password','database': 'test_db','charset': 'utf8mb4','cursorclass': pymysql.cursors.DictCursor
}sql_insert = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
sql_update = "UPDATE users SET age = %s WHERE name = %s"data_insert = ('赵六', 30, 'zhaoliu@example.com')
data_update = (31, '赵六')try:with pymysql.connect(**connection_params) as connection:with connection.cursor() as cursor:cursor.execute(sql_insert, data_insert)cursor.execute(sql_update, data_update)connection.commit() # 提交事务
except Exception as e:connection.rollback() # 回滚事务print(f"发生错误: {e}")
六、使用ORM框架(推荐)
虽然直接使用SQL语句可以灵活地操作数据库,但对于复杂的项目,使用ORM(对象关系映射)框架可以提高开发效率和代码可维护性。SQLAlchemy是Python中一个强大的ORM框架,支持多种数据库,包括MySQL。
安装SQLAlchemy
pip install SQLAlchemy pymysql
使用SQLAlchemy连接MySQL
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker# 创建数据库引擎
engine = create_engine('mysql+pymysql://your_username:your_password@localhost/test_db?charset=utf8mb4')# 创建基类
Base = declarative_base()# 定义User模型
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String(50))age = Column(Integer)email = Column(String(100))# 创建会话
Session = sessionmaker(bind=engine)
session = Session()# 创建表(如果不存在)
Base.metadata.create_all(engine)# 添加新用户
new_user = User(name='孙七', age=27, email='sunqi@example.com')
session.add(new_user)
session.commit()# 查询用户
users = session.query(User).filter(User.age > 25).all()
for user in users:print(user.name, user.age, user.email)# 关闭会话
session.close()
七、最佳实践
1、使用参数化查询:避免SQL注入攻击,使用参数化查询(如 %s 占位符)或ORM框架。
2、管理连接池:对于高并发应用,使用连接池(如SQLAlchemy的连接池)来管理数据库连接。
3、处理异常:建议使用 try-except 捕获并处理数据库操作中的异常,确保程序的健壮性。
4、关闭连接:确保在操作完成后关闭数据库连接,释放资源。
5、优化查询:编写高效的SQL查询,避免全表扫描和不必要的复杂查询。
6、事务管理:在执行插入、更新、删除操作后,需要调用 conn.commit() 提交事务。
八、总结
使用Python连接和操作MySQL数据库是数据采集、处理和存储中的常见需求。通过PyMySQL、mysql-connector-python等库,可以方便地执行CRUD操作;而使用ORM框架如SQLAlchemy,则可以提高开发效率和代码的可维护性。在实际应用中,结合具体需求选择合适的方法,并遵循最佳实践,可以确保数据库操作的效率和安全性。
相关文章:
数据存储:一文掌握存储数据到mysql的详细使用
文章目录 一、环境准备1.1 安装MySQL数据库1.2 安装Python MySQL驱动 二、连接到MySQL数据库三、执行基本的CRUD操作3.1 创建(Create):插入数据3.2 读取(Read):查询数据3.3 更新(Update…...
【华为OD机考】华为OD笔试真题解析(15)--异常的打卡记录
题目描述 考勤记录是分析和考核职工工作时间利用情况的原始依据,也是计算职工工资的原始依据,为了正确地计算职工工资和监督工资基金使用情况,公司决定对员工的手机打卡记录进行异常排查。 如果出现以下两种情况,则认为打卡异常…...
Java实战:使用HttpClient实现图片下载与本地保存
在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求。其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都显得尤为重要。无论是社交媒体平台、电商平台,还是个人项目,能够高效地…...
【实战】使用PCA可视化神经网络提取后的特征空间【附源码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
DeepSeek05-大模型WebUI
一、说明: 将DeepSeek部署到前台Web界面的方法主要有以下几种推荐方案,涵盖开源工具、第三方客户端及特定场景适配方案: Open WebUIChatbox AICherry StudioSillyTavern 二、Open WebUI 安装配置教程 特点:Open WebUI 是一个开…...
第14天:C++异常处理实战指南 - 构建安全的文件解析系统
第14天:C异常处理实战指南 - 构建安全的文件解析系统 一、今日学习目标 🎯 掌握C异常处理的核心语法与流程🛡️ 理解RAII在资源管理中的关键作用📦 创建自定义文件解析异常体系🚀 实现安全的文件解析器原型 二、C异常…...
JavaScript遍历方式总结
目录 一、数组遍历方法 1.1for循环 1.2for...of循环 1.3forEach 1.4map方法 1.5filter方法 1.6reduce方法 1.7some方法 1.8every方法 二、对象遍历方法 2.1for...in方法 2.2values、keys方法 2.3entries方法 一、数组遍历方法 1.1for循环 最普通的循环…...
Python毕业设计选题:基于Python的社区爱心养老管理系统设计与实现_django
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 身体健康界面 公共书籍界面 借阅信息界面 归还…...
Spring Boot整合WebSocket
目录 ?引言 1.WebSocket 基础知识 ?1.1 什么是 WebSocket? ?1.2 WebSocket 的应用场景 ?2.Spring Boot WebSocket 整合步骤 2.1 创建 Spring Boot 项目 2.2 添加 Maven 依赖 2.3 配置 WebSocket 2.4 创建 WebSocket 控制器 2.5 创建前端页面 引言 在…...
Pycharm使用matplotlib出现的问题(1、不能弹出图表 2、图表标题中文不显示)
Pycharm使用matplotlib出现的问题 问题1:Pycharm调试时出现:AttributeError: module backend_interagg has no attribute FigureCanvas. Did you mean: FigureCanvasAgg? 排查原因:可能是由于matplotlib后端设置不正确或与运行环境不兼容引…...
《宇树科技:解锁机器人技术的未来密码》:此文为AI自动生成
走进宇树科技 在科技飞速发展的今天,机器人领域正以前所未有的速度蓬勃发展,成为全球瞩目的焦点。在这个充满创新与挑战的领域中,宇树科技宛如一颗璀璨的明星,闪耀着独特的光芒。它不仅在国内机器人行业占据着重要地位,更是在国际舞台上崭露头角,成为了中国机器人技术的…...
Spark map与mapPartitions算子源码级深度解析
Spark map与mapPartitions算子源码级深度解析 一、核心源码结构差异 1. map算子实现逻辑 def map[U: ClassTag](f: T => U): RDD[U] = withScope {val cleanF = sc.clean(f)new MapPartitionsRDD[U, T](this, (context, pid, iter) => iter.map(cleanF)) }实现特征: …...
在 Vue 3 中,如何缓存和复用动态组件
在 Vue 3 中,如何缓存和复用动态组件,这有助于提高应用的性能,避免组件重复创建和销毁带来的开销。下面详细介绍其使用方法和相关配置。 1. 使用 <KeepAlive> 组件缓存动态组件 基本使用 <KeepAlive> 是 Vue 3 内置的一个组件…...
【PromptCoder】使用 package.json 生成 cursorrules
【PromptCoder】使用 package.json 生成 cursorrules 在当今快节奏的开发世界中,效率和准确性至关重要。开发者们不断寻找能够优化工作流程、帮助他们更快编写高质量代码的工具。Cursor 作为一款 AI 驱动的代码编辑器,正在彻底改变我们的编程方式。但如…...
给博客添加基于百度地图的足迹页面
使用百度地图 api 做的足迹页面一段时间了,经过一番改造,目前已基本能够满足自己需求。 一、添加百度地图 添加百度地图基本思路就是6点: 申请百度AK适当位置添加百度地图容器引入百度地图 api创建地图实例设置地图中心点初始化地图 这里…...
【构建工具】Gradle Kotlin DSL中的大小写陷阱:BuildConfigField
在Android开发当中,BuildConfig是一个非常有用的功能,它允许我们在构建过程中定义常量,并在运行时使用它们。But!!当我们从传统的Groovy DSL迁移到Kotlin DSL时或者被Android Studio坑的时候,有一些细微的差…...
南京来可电子CAN总线数据记录仪在汽车售后服务站的应用
南京来可电子CAN总线数据记录仪在汽车售后服务站的应用 南京来可电子(LaiCore)作为国内领先的车载数据采集设备供应商,其CAN总线数据记录仪凭借高精度、多协议兼容性及智能化功能,在汽车售后服务站中发挥重要作用。以下是其核心应…...
FreeSql + .Net6 多库连接实现
1、安装Nuget包 AutoMapper 2、program.cs里添加如下配置: services.AddSingleton(r >{var str configuration.GetConnectionString("MES");return new FreeSqlBuilder().UseConnectionString(DataType.SqlServer, str).Build<MESFlag>();});s…...
4个小时开发DeepSeek+baiduNaotu一键生成思维导图
一、引言 最近发现AI生成思维导图的解决方案普遍存在两个断层:用户需手动复制模型输出的JSON数据到脑图软件,且缺乏实时可视化反馈。基于日常使用的BaiduNaotu框架(其轻量级架构与简洁的UI设计已满足基础需求),我决定…...
(21)从strerror到strtok:解码C语言字符函数的“生存指南2”
❤个人主页:折枝寄北的博客 ❤专栏位置:简单入手C语言专栏 目录 前言1. 错误信息报告1.1 strerror 2. 字符操作2.1 字符分类函数2.2 字符转换函数 3. 内存操作函数3.1 memcpy3.2 memmove3.2memset3.3 memcmp 感谢您的阅读 前言 当你写下strcpy(dest, s…...
构建动态URL查询字符串以导出报警统计数据
如何构建动态URL查询字符串以导出报警统计数据 在开发Web应用程序时,经常需要根据用户的选择或输入来动态构建URL查询字符串,以便从服务器检索或导出数据。在本文中,我们将展示如何使用JavaScript来构建一个动态URL查询字符串,用…...
SpringBoot集成easy-captcha图片验证码框架
SpringBoot集成easy-captcha图片验证码框架 此项目已经很久未维护,如有更好的选择,建议使用更好的选择!!! 一、引言 验证码(CAPTCHA)是现代应用中防止机器人攻击、保护接口安全的核心手段之一。然而,从零开发验证码…...
Apache Flink:实时数据流处理的终极武器
Apache Flink:实时数据流处理的终极武器 在当今这个数据驱动的世界,实时数据流处理已经成为各行各业的核心需求。从金融风控到电商推荐,从物联网监控到网络安全,毫秒级的响应能力决定了一家公司在市场中的竞争力。而在众多流式计…...
货车一键启动无钥匙进入手机远程启动的正确使用方法
一、移动管家货车无钥匙进入系统的使用方法 基本原理:无钥匙进入系统通常采用RFID无线射频技术和车辆身份识别码识别系统。车钥匙需要随身携带,当车钥匙靠近货车时,它会自动与货车的解码器匹配。开门操作:当靠近货车后࿰…...
C# Enumerable类 之 生成序列
总目录 前言 在 C# 中,System.Linq.Enumerable 类是 LINQ(Language Integrated Query)的核心组成部分,它提供了一系列静态方法,用于操作实现了 IEnumerable 接口的集合。通过这些方法,我们可以轻松地对集合…...
【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.2.2倒排索引原理与分词器(Analyzer)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 1.2.2倒排索引原理与分词器(Analyzer)1. 倒排索引:搜索引擎的基石1.1 正排索引 vs 倒排索引示例数据对比: 1.2 倒排索引核心结…...
salesforce 为什么无法关闭task,显示:insufficient access rights on object id
在 Salesforce 中,如果你在尝试关闭任务(Task)时遇到 “Insufficient access rights on object id” 错误,通常是由于以下几种可能的权限问题导致的: 1. 任务的所有权问题 Salesforce 中的任务(Task&…...
和鲸科技携手四川气象,以 AI 的力量赋能四川气象一体化平台建设
气象领域与农业、能源、交通、环境科学等国计民生关键领域紧密相连,发挥着不可替代的重要作用。人工智能技术的迅猛发展,为气象领域突破困境带来了新的契机。AI 技术能够深度挖掘气象大数据中蕴含的复杂信息,助力人类更精准地把握自然规律&am…...
linux下java Files.copy 提示文件名过长
linux下java Files.copy 提示文件名过长问题排查 系统运行时执行文件拷贝的功能的时候出现了 文件名称过长的报错提示 查询过资料后整理出了每个操作系统支持最大的文件名称长度 每个操作系统现在的文件长度不一样 Linux的 /usr/include/linux/limits.h 中做出了说明 这些限制…...
工业AR眼镜的‘芯’动力:FPC让制造更智能【新立电子】
随着增强现实(AR)技术的快速发展,工业AR智能眼镜也正逐步成为制造业领域的重要工具。它不仅为现场工作人员提供了视觉辅助,还极大地提升了远程协助的效率、优化了仓储管理。新立电子其高性能的FPC产品在AI眼镜中的应用,…...
