MySQL Python 连接与使用
MySQL 是最流行的开源关系型数据库之一,而 Python 是当今最受欢迎的编程语言之一。将 Python 与 MySQL 结合使用,可以让我们轻松地开发数据库驱动的应用程序。
本文将详细介绍如何使用 Python 连接和操作 MySQL 数据库,内容包含如下:
- 如何安装 MySQL Python 驱动
- 建立和关闭数据库连接
- 执行各种 SQL 查询
- 事务管理和错误处理
- 数据库操作的最佳实践
准备工作
安装必要的软件
在开始之前,请确保你已经安装了以下软件:
- Python (推荐 3.6 或更高版本)
- MySQL Server (社区版即可)
- MySQL Connector/Python (Python 的 MySQL 驱动)
安装 MySQL Connector/Python
可以通过 pip 安装 MySQL 官方提供的 Python 驱动:
pip install mysql-connector-python
或者安装 PyMySQL (另一个流行的 MySQL Python 驱动):
pip install pymysql
连接 MySQL 数据库
建立基本连接
以下是使用
mysql-connector-python
建立数据库连接的基本代码:
importmysql.connector# 创建数据库连接db=mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="yourdatabase")print("数据库连接成功!")
连接参数说明
-
host: MySQL 服务器地址 (本地为 "localhost") -
user: 数据库用户名 -
password: 用户密码 -
database: 要连接的数据库名称 (可选)
使用 PyMySQL 连接
如果你选择使用 PyMySQL,连接方式略有不同:
importpymysql# 创建数据库连接db=pymysql.connect(host="localhost",user="yourusername",password="yourpassword",database="yourdatabase")print("数据库连接成功!")
执行 SQL 查询
创建游标对象
在执行 SQL 语句前,我们需要创建一个游标(cursor)对象:
cursor=db.cursor()
执行 SELECT 查询
cursor.execute("SELECT * FROM your_table")# 获取所有结果results=cursor.fetchall()forrowinresults:print(row)
执行 INSERT, UPDATE, DELETE 操作
# 插入数据sql="INSERT INTO users (name, age) VALUES (%s, %s)"values=("张三",25)cursor.execute(sql,values)# 提交事务db.commit()print(cursor.rowcount,"条记录插入成功")
使用参数化查询
为了防止 SQL 注入,应该始终使用参数化查询:
sql="SELECT * FROM users WHERE name = %s"name=("张三",)cursor.execute(sql,name)
事务管理
事务的基本概念
MySQL 事务是一组原子性的 SQL 查询,要么全部执行成功,要么全部不执行。
使用事务
try:# 开始事务cursor.execute("START TRANSACTION")# 执行多个SQL语句cursor.execute("UPDATE accounts SET balance = balance - 100 WHERE id = 1")cursor.execute("UPDATE accounts SET balance = balance + 100 WHERE id = 2")# 提交事务db.commit()print("事务执行成功")exceptExceptionase:# 发生错误,回滚事务db.rollback()print("事务执行失败:",e)
错误处理
捕获数据库错误
try:cursor.execute("SELECT * FROM non_existent_table")exceptmysql.connector.Erroraserr:print("数据库错误:",err)
常见错误代码
-
1045: 访问被拒绝 (错误的用户名或密码) -
1049: 未知数据库 -
1146: 表不存在 -
1062: 重复键值
关闭连接
正确关闭连接
完成数据库操作后,应该关闭游标和连接:
cursor.close()db.close()print("数据库连接已关闭")
使用 with 语句
Python 的
with
语句可以自动管理资源:
withmysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="yourdatabase")asdb:withdb.cursor()ascursor:cursor.execute("SELECT * FROM users")results=cursor.fetchall()forrowinresults:print(row)# 离开with块后连接会自动关闭
最佳实践
连接池
对于频繁连接数据库的应用,建议使用连接池:
frommysql.connectorimportpooling# 创建连接池db_pool=pooling.MySQLConnectionPool(pool_name="mypool",pool_size=5,host="localhost",user="yourusername",password="yourpassword",database="yourdatabase")# 从连接池获取连接db=db_pool.get_connection()
ORM 框架
对于复杂应用,可以考虑使用 ORM (对象关系映射) 框架,如 SQLAlchemy 或 Django ORM。