详细介绍一下Python连接MySQL数据库的完整步骤
以下是 Python 连接 MySQL 数据库的完整步骤,包含环境准备、连接建立、数据操作、错误处理和性能优化等内容:
一、环境准备
- 安装 MySQL 服务器
Windows/macOS:下载安装包 MySQL Installer
Linux:
bash
Ubuntu/Debian
sudo apt-get install mysql-server
CentOS/RHEL
sudo yum install mysql-server
- 启动 MySQL 服务
bash
Linux/macOS
sudo service mysql start
Windows
net start mysql
- 创建测试数据库和用户
sql
– 登录MySQL
mysql -u root -p
– 创建数据库
CREATE DATABASE testdb;
– 创建用户并授权
CREATE USER ‘testuser’@‘localhost’ IDENTIFIED BY ‘testpassword’;
GRANT ALL PRIVILEGES ON testdb.* TO ‘testuser’@‘localhost’;
FLUSH PRIVILEGES;
4. 安装 Python 驱动
bash
pip install mysql-connector-python
二、建立数据库连接
- 基本连接示例
python
import mysql.connector
from mysql.connector import Error
try:
connection = mysql.connector.connect(
host=‘localhost’,
user=‘testuser’,
password=‘testpassword’,
database=‘testdb’,
port=3306 # 默认端口
)
if connection.is_connected():db_info = connection.get_server_info()print(f"连接成功,MySQL服务器版本: {db_info}")cursor = connection.cursor()cursor.execute("SELECT DATABASE();")database = cursor.fetchone()print(f"当前数据库: {database}")
except Error as e:
print(f"连接错误: {e}")
finally:
if connection.is_connected():
cursor.close()
connection.close()
print(“数据库连接已关闭”)
2. 连接参数详解
python
connection = mysql.connector.connect(
host=‘localhost’, # 主机地址
user=‘testuser’, # 用户名
password=‘testpassword’, # 密码
database=‘testdb’, # 数据库名
port=3306, # 端口号
charset=‘utf8mb4’, # 字符集
autocommit=True, # 自动提交事务
connection_timeout=10 # 连接超时时间(秒)
)
三、执行 SQL 操作
-
创建表
python
try:
connection = mysql.connector.connect(…)
cursor = connection.cursor()create_table_query = “”"
CREATE TABLE IF NOT EXISTS employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
department VARCHAR(255) NOT NULL,
salary DECIMAL(10, 2) NOT NULL,
hire_date DATE NOT NULL
)
“”"cursor.execute(create_table_query)
print(“表创建成功”)
except Error as e:
print(f"表创建失败: {e}")
2. 插入数据
python
try:
connection = mysql.connector.connect(…)
cursor = connection.cursor()
# 单条插入
insert_query = """
INSERT INTO employees (name, department, salary, hire_date)
VALUES (%s, %s, %s, %s)
"""
employee_data = ("John Doe", "IT", 5000.00, "2023-01-15")
cursor.execute(insert_query, employee_data)# 批量插入
employees_data = [("Jane Smith", "HR", 6000.00, "2023-02-20"),("Robert Johnson", "Finance", 5500.00, "2023-03-10")
]
cursor.executemany(insert_query, employees_data)connection.commit() # 提交事务
print(f"插入成功,影响行数: {cursor.rowcount}")
except Error as e:
print(f"插入失败: {e}")
connection.rollback() # 回滚事务
3. 查询数据
python
try:
connection = mysql.connector.connect(…)
cursor = connection.cursor()
# 查询所有记录
select_query = "SELECT * FROM employees"
cursor.execute(select_query)
records = cursor.fetchall()
print(f"共查询到 {cursor.rowcount} 条记录")for row in records:print(f"ID: {row[0]}, 姓名: {row[1]}, 部门: {row[2]}, 薪水: {row[3]}")# 参数化查询
select_salary_query = "SELECT * FROM employees WHERE salary > %s"
cursor.execute(select_salary_query, (5000,))
high_salary_employees = cursor.fetchall()
print(f"高薪员工: {len(high_salary_employees)} 人")
except Error as e:
print(f"查询失败: {e}")
4. 更新数据
python
try:
connection = mysql.connector.connect(…)
cursor = connection.cursor()
update_query = "UPDATE employees SET salary = salary * 1.1 WHERE department = %s"
cursor.execute(update_query, ("IT",))
connection.commit()
print(f"更新成功,影响行数: {cursor.rowcount}")
except Error as e:
print(f"更新失败: {e}")
connection.rollback()
5. 删除数据
python
try:
connection = mysql.connector.connect(…)
cursor = connection.cursor()
delete_query = "DELETE FROM employees WHERE hire_date < %s"
cursor.execute(delete_query, ("2023-02-01",))
connection.commit()
print(f"删除成功,影响行数: {cursor.rowcount}")
except Error as e:
print(f"删除失败: {e}")
connection.rollback()
四、高级操作
- 使用字典游标
python
cursor = connection.cursor(dictionary=True)
cursor.execute(“SELECT * FROM employees”)
records = cursor.fetchall()
for row in records:
print(f"姓名: {row[‘name’]}, 部门: {row[‘department’]}")
2. 事务处理
python
try:
connection = mysql.connector.connect(…)
connection.autocommit = False # 关闭自动提交
cursor = connection.cursor()# 执行多个操作
cursor.execute("INSERT INTO employees (...) VALUES (...)")
cursor.execute("UPDATE departments SET budget = budget - 10000")connection.commit() # 提交事务
print("事务执行成功")
except Error as e:
print(f"事务失败: {e}")
connection.rollback() # 回滚事务
3. 连接池
python
from mysql.connector import pooling
创建连接池
connection_pool = pooling.MySQLConnectionPool(
pool_name=“mypool”,
pool_size=5,
host=‘localhost’,
user=‘testuser’,
password=‘testpassword’,
database=‘testdb’
)
从连接池获取连接
connection = connection_pool.get_connection()
cursor = connection.cursor()
cursor.execute(“SELECT * FROM employees”)
五、错误处理与最佳实践
except mysql.connector.Error as e:
if e.errno == 1045: # 访问拒绝
print(“用户名或密码错误”)
elif e.errno == 1049: # 数据库不存在
print(“数据库不存在”)
elif e.errno == 2003: # 无法连接
print(“无法连接到MySQL服务器”)
else:
print(f"未知错误: {e}")
2. 资源管理
python
使用上下文管理器自动关闭连接和游标
with mysql.connector.connect(…) as connection:
with connection.cursor() as cursor:
cursor.execute(“SELECT * FROM employees”)
records = cursor.fetchall()
3. 性能优化
python
批量插入优化
data = [(f"User{i}", “Dept”, 5000) for i in range(1000)]
cursor.executemany(“INSERT INTO users VALUES (%s, %s, %s)”, data)
使用预编译语句
stmt = connection.prepare(“INSERT INTO users VALUES (?, ?, ?)”)
cursor.execute(stmt, (“User1”, “Dept”, 5000))
六、安全注意事项
避免 SQL 注入:
python
错误做法(不安全)
query = f"SELECT * FROM users WHERE name = ‘{name}’"
正确做法(使用参数化查询)
query = “SELECT * FROM users WHERE name = %s”
cursor.execute(query, (name,))
密码管理:
python
不要硬编码密码
推荐使用环境变量或配置文件
import os
password = os.environ.get(‘MYSQL_PASSWORD’)
权限最小化:
sql
– 为应用创建具有最小权限的用户
GRANT SELECT, INSERT, UPDATE ON testdb.* TO ‘appuser’@‘localhost’;
相关文章:
详细介绍一下Python连接MySQL数据库的完整步骤
以下是 Python 连接 MySQL 数据库的完整步骤,包含环境准备、连接建立、数据操作、错误处理和性能优化等内容: 一、环境准备 安装 MySQL 服务器 Windows/macOS:下载安装包 MySQL Installer Linux: bash Ubuntu/Debian sudo apt-…...

【Unity 2023 新版InputSystem系统】新版InputSystem 如何进行人物移动(包括配置、代码详细实现过程)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、InputSystem配置二、GameInput 游戏输入脚本1.实现思路2.完整代码三、Player 游戏人物移动脚本1.实现思路2.完整代码四、场景脚本设置1.组件设置五、问题解决1.人物一直下落2.人物跳跃时,…...

单片机-STM32部分:13-1、编码器
飞书文档https://x509p6c8to.feishu.cn/wiki/BpEywhaX9iqbiLkdqdAcmDnwnab EC旋转编码器 在产品开发过程中,需要位置闭环的的产品,类似电机类产品来说,编码器至关重要,它不仅可以使我们对带年纪进行精确的速度闭环,位…...
机器学习第十二讲:特征选择 → 选最重要的考试科目做录取判断
机器学习第十二讲:特征选择 → 选最重要的考试科目做录取判断 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南 一、学…...

关于我在使用stream().toList()遇到的问题
关于我在使用stream().toList()遇到的问题 问题描述 在测试以上程序的时候抛出了空指针异常 于是我以为是我数据库中存在null字段,但查看后发现并不存在为null的数据 问题排查 起初我以为问题出现在sort排序方法这,事实也确实是,当我把s…...
javascript 编程基础(2)javascript与Node.js
文章目录 一、Node.js 与 JavaScript1、基本概念1.1、JavaScript:动态脚本语言1.2、Node.js:JavaScript 运行时环境 2、核心区别3、执行环境差异3.1、浏览器中的JavaScript3.2、Node.js中的JavaScript 4、共同点5、为什么需要Node.js? 一、No…...
Spring Boot 集成 druid,实现 SQL 监控
文章目录 背景Druid 简介监控统计 StateFilter其它 Filter详细步骤第 1 步:添加依赖第 2 步:添加数据源配置【通用部分】第 3 步:添加监控配置【关键部分】第 3 步:访问 druid 页面参考背景 😂 在 Code Review 过程中发现,经常有开发会忘记给表加索引。这就导致,生产运…...

多卡跑ollama run deepseek-r1
# 设置环境变量并启动模型 export CUDA_VISIBLE_DEVICES0,1,2,3 export OLLAMA_SCHED_SPREAD1 # 启用多卡负载均衡 ollama run deepseek-r1:32b 若 deepseek-r1:32b 的显存需求未超过单卡容量(如单卡 24GB),Ollama 不会自动启用多卡 在run…...
HTML向四周扩散背景
<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>扩散背景效果</title><style>body {…...

基于Java在高德地图面查询检索中使用WGS84坐标的一种方法-以某商场的POI数据检索为例
前言 随着移动互联网的飞速发展,基于位置的服务(LBS)需求日益增长,越来越多的应用需要从地图中检索特定区域内的地理信息,例如商业场所、公共服务设施等。商场作为城市商业活动的重要载体,其周边的地理信息…...
使用 Terraform 创建 Azure Databricks
使用 Terraform 创建 Azure Databricks Terraform 是一种基础设施即代码(IaC)工具,允许用户通过声明式配置文件来管理和部署云资源。Azure Databricks 是一个基于 Apache Spark 的分析平台,专为数据工程和数据科学设计。通过 Terraform,可以自动化 Azure Databricks 的创…...

本地部署dify+ragflow+deepseek ,结合小模型实现故障预测,并结合本地知识库和大模型给出维修建议
1.准备工作 使用ollama 拉取deepseek-r1:7b 官网下载ollama ollama run deepseek-r1:7b ollama list Ragflow专注于构建基于检索增强生成(RAG)的工作流,强调模块化和轻量化,适合处理复杂文档格式和需要高精度检索的场景。Dify…...

SECERN AI提出3D生成方法SVAD!单张图像合成超逼真3D Avatar!
SECERN AI提出的3D生成方法SVAD通过视频扩散生成合成训练数据,利用身份保留和图像恢复模块对其进行增强,并利用这些经过优化的数据来训练3DGS虚拟形象。SVAD在新的姿态和视角下保持身份一致性和精细细节方面优于现有最先进(SOTA)的…...
深入探索:Core Web Vitals 进阶优化与新兴指标
一、INP(Interaction to Next Paint)深度解析 INP 与 FID 的核心差异 • 响应范围:FID仅测量首次输入延迟,而INP跟踪页面生命周期中所有关键交互 • 测量维度:INP综合考虑输入延迟、处理时间和下一帧渲染时间 • 评…...
c/c++的opencv开闭操作
OpenCV 中的形态学开运算与闭运算 (C) 在计算机视觉和图像处理领域,形态学操作是用于分析和处理图像形状的一系列非线性操作。OpenCV 作为一个强大的开源计算机视觉库,提供了丰富的形态学转换函数。其中,“开运算”(Opening&…...

【物联网】 ubantu20.04 搭建L2TP服务器
部署篇 序言 为了是两个客户端在同一个网络内,需要找一台服务器,搭建一个L2TP服务器,通过L2TP使两个客户端在同一个网络内,为什么要搭建,主要是解决例如员工出差后,还需要连接公司内网资源的问题,本文主要…...
winrar 工具测试 下载 与安装
https://zhuanlan.zhihu.com/p/680852417 https://www.angusj.com/resourcehacker/#download 点击String Table,在展开列表中找到80:2052展开,删除1277行。点击右上方编译按钮,并保存。...
PLC组网的方法、要点及实施全解析
一、PLC组网方法 1.1 基于以太网的组网 - 适用场景:适用于数据传输量大、通信距离长、对实时性要求相对不苛刻的场景,如大型工厂的车间级数据交互、跨区域设备协同控制 。 - 实现方式:利用工业以太网交换机,将支持以太网接口的…...
网络安全深度解析:21种常见网站漏洞及防御指南
一、高危漏洞TOP 10 1. SQL注入(SQLi) 原理:通过构造恶意SQL语句突破系统过滤机制 典型场景: - 联合查询注入: union select 1,version(),3--+ - 布尔盲注:and (select substr(user(),1,1)=r) - 时间盲注:;if(now()=sysdate(),sleep(5),0)/ 防御方案: - 严格参数化查…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit (3)
1.问题描述: 通过CardRecognition识别身份证拍照拿到的照片地址,使用该方法获取不到图片文件,请问如何解决? 解决方案: //卡证识别实现页,文件名为CardDemoPage,需被引入至入口页 import { …...
Java大厂面试实战:Spring Boot与微服务场景中的技术点解析
Java大厂面试实战:Spring Boot与微服务场景中的技术点解析 第一轮:基础技术了解 面试官:谢飞机,你好。从简历上看,你熟悉Spring Boot,那我们来聊聊它的核心功能吧。Spring Boot有哪些主要的特性ÿ…...

从零启动 Elasticsearch
elastic 有弹力的 ElaticSearch (ES)是一个基于 Lucene 的分布式全文检索引擎。可以做到近乎实时地存储、检索数据,并且本身具有良好的扩展性,可以扩展到上百台服务器,处理PB级别(1 Petabyte 1024TB&…...
比较两个用于手写体识别的卷积神经网络(CNN)模型
要比较两个用于手写体识别的卷积神经网络(CNN)模型,可以从以下 6个核心维度 进行系统性评估,并直接给出对比结论: 一、基础性能对比(核心指标) 准确率 直接比较两个模型在 相同测试集 上的分类准确率(如MNIST测试集的错误率是否低于0.5%)若准确率接近…...
Linux利用多线程和线程同步实现一个简单的聊天服务器
1. 概述 本文实现一个基于TCP/IP的简单多人聊天室程序。它包含一个服务器端和一个客户端:服务器能够接收多个客户端的连接,并将任何一个客户端发来的消息广播给所有其他连接的客户端;客户端则可以连接到服务器,发送消息并接收来自…...
【计网】作业5
待补充 212.56.132.0/24 212.56.1000 0100.0 212.56.133.0/24 212.56.1000 0101.0 212.56.134.0/24 212.56.1000 0110.0 212.56.135.0/24 212.56.1000 0111.0 最小的212.56.1000 0100.0 四个,2^2 212.56.132.0/22 1111 1111.1111 1111.1111 1100.0000 0000 255.255.…...
15、Python布尔逻辑全解析:运算符优先级、短路特性与实战避坑指南
适合人群:零基础自学者 | 编程小白快速入门 阅读时长:约6分钟 文章目录 一、问题:Python布尔值的底层原理?1、例子1:电路开关模型解析布尔本质2、例子2:特殊的布尔类型值为False3、答案:(1&…...

Nginx基础知识
Nginx是什么? Nginx 是一款高性能的 Web 服务器、反向代理服务器和负载均衡器,以其高并发处理能力和低内存消耗著称。以下是 Nginx 的基础知识和常见配置示例: 1. 核心概念 • 配置文件位置:通常为 /etc/nginx/nginx.conf 或 /us…...

Vue-监听属性
监听属性 简单监听 点击切换名字,来回变更Tom/Jerry,输出 你好,Tom/Jerry 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>监听属性</title><!-- …...

python fastapi + react, 写一个图片 app
1. 起因, 目的: 上厕所的时候,想用手机查看电脑上的图片,但是又不想点击下载。此app 应运而生。 2. 先看效果 单击图片,能放大图片 3. 过程: 过程很枯燥。有时候, 有一堆新的想法。 但是做起来太麻烦,…...
nginx集成防火墙ngx_waf的docker版
由于公网的环境越来与严峻,所以想找一个nginx带防火墙的版本 调研过openresty,大部分集成redis了,感觉还是太重了,有一个不那么重的https://github.com/unixhot/waf 但是维护没有那么勤,最后维护是5年前,倒…...