pymysql用法
时间: 2025-06-14 15:12:11 浏览: 11
<think>我们正在讨论pymysql的使用方法。根据用户要求,我们需要提供pymysql的使用教程、示例和语法。参考引用[1]中给出了一个连接数据库的示例,引用[2]简要介绍了MySQL。我们将从以下几个方面展开:1.安装pymysql2.连接数据库3.创建游标对象4.执行SQL语句(包括查询、插入、更新、删除等)5.提交事务和关闭连接6.错误处理注意:在代码示例中,我们将使用引用[1]中的连接示例作为基础,并扩展其他操作。我们将使用行内代码格式表示代码关键字,独立代码块表示完整示例。首先,确保已经安装pymysql。如果没有安装,可以使用pip安装:```bashpipinstallpymysql```接下来,我们按照步骤进行说明。</think>### PyMySQL 使用教程
PyMySQL 是一个纯 Python 实现的 MySQL 客户端库,用于在 Python 程序中连接和操作 MySQL 数据库。以下是详细使用指南:
#### 1. 安装 PyMySQL
```bash
pip install pymysql
```
#### 2. 基本使用流程
```python
import pymysql
# 1. 创建数据库连接
connection = pymysql.connect(
host='localhost', # 数据库地址
user='admin', # 用户名
password='mysql123', # 密码
database='shop', # 数据库名
charset='utf8mb4', # 字符编码
cursorclass=pymysql.cursors.DictCursor # 返回字典格式结果
)
try:
# 2. 创建游标对象
with connection.cursor() as cursor:
# 3. 执行SQL语句
sql = "SELECT * FROM products WHERE price > %s"
cursor.execute(sql, (50,)) # 安全参数化查询
# 4. 获取结果
results = cursor.fetchall()
for row in results:
print(f"产品: {row['name']}, 价格: {row['price']}")
# 5. 提交事务(写操作需要)
connection.commit()
finally:
# 6. 关闭连接
connection.close()
```
#### 3. 核心操作详解
**a. 连接数据库参数**
| 参数 | 说明 | 示例值 |
|------|------|--------|
| `host` | 数据库服务器地址 | `'localhost'` |
| `user` | 用户名 | `'admin'` |
| `password` | 密码 | `'mysql123'` |
| `database` | 数据库名 | `'shop'` |
| `port` | 端口号(默认3306) | `3306` |
| `charset` | 字符编码 | `'utf8mb4'` |
**b. 游标操作**
```python
# 创建游标
cursor = connection.cursor()
# 执行SQL
cursor.execute("INSERT INTO users (name, email) VALUES (%s, %s)", ("张三", "[email protected]"))
# 获取结果
cursor.fetchone() # 获取单条记录
cursor.fetchmany(5) # 获取指定数量记录
cursor.fetchall() # 获取所有记录
# 获取最后插入ID
last_id = cursor.lastrowid
```
**c. 事务管理**
```python
try:
cursor.execute("UPDATE accounts SET balance = balance - 100 WHERE id=1")
cursor.execute("UPDATE accounts SET balance = balance + 100 WHERE id=2")
connection.commit() # 提交事务
except:
connection.rollback() # 回滚事务
```
#### 4. 完整操作示例
**创建表**
```python
create_table_sql = """
CREATE TABLE IF NOT EXISTS employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
department VARCHAR(100),
salary DECIMAL(10, 2)
)
"""
cursor.execute(create_table_sql)
```
**批量插入数据**
```python
data = [
('李四', '技术部', 8500),
('王五', '市场部', 9200),
('赵六', '财务部', 7800)
]
insert_sql = "INSERT INTO employees (name, department, salary) VALUES (%s, %s, %s)"
cursor.executemany(insert_sql, data)
connection.commit()
```
**带条件的查询**
```python
query = "SELECT name, salary FROM employees WHERE department=%s AND salary > %s"
cursor.execute(query, ('技术部', 8000))
for row in cursor.fetchall():
print(f"{row['name']}: {row['salary']}")
```
#### 5. 错误处理
```python
try:
cursor.execute("SELECT * FROM non_existent_table")
except pymysql.MySQLError as e:
print(f"数据库错误: {e.args[0]} {e.args[1]}")
except Exception as e:
print(f"常规错误: {str(e)}")
```
#### 6. 连接池管理(生产环境推荐)
```python
from DBUtils.PooledDB import PooledDB
pool = PooledDB(
creator=pymysql,
maxconnections=5, # 最大连接数
host='localhost',
user='admin',
password='mysql123',
database='shop',
charset='utf8mb4'
)
# 从连接池获取连接
connection = pool.connection()
cursor = connection.cursor()
# ...执行操作...
cursor.close()
connection.close() # 实际是返回连接池
```
### 注意事项
1. **安全防护**:始终使用参数化查询(`%s`占位符)防止 SQL 注入
2. **资源释放**:使用 `with` 语句或 `finally` 块确保连接关闭
3. **字符编码**:推荐使用 `utf8mb4` 支持完整 Unicode 字符
4. **事务控制**:写操作后需要显式调用 `commit()`
5. **连接复用**:高并发场景使用连接池提升性能
通过 PyMySQL 可以实现完整的数据库操作,包括数据查询、事务管理、批量操作等,是 Python 操作 MySQL 数据库的标准方案之一[^1][^2]。
阅读全文
相关推荐


















