pymysql 入门

发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。

1. 什么是 PyMySQL?

PyMySQL 是一个纯 Python 编写的 MySQL 客户端库,可以通过它轻松地在 Python 中连接并操作 MySQL 数据库。它兼容 MySQL 5.x 和 MariaDB,并且与 MySQL 官方提供的客户端接口(C API)兼容。PyMySQL 支持数据库连接、执行 SQL 查询、以及提取查询结果等功能。

1.1 为什么选择 PyMySQL?

  • 纯 Python 实现:没有 C 扩展,安装起来更加简单,兼容性更好。
  • 易用性:与 MySQL 数据库的交互非常直观。
  • 支持 Python3:在 Python3 环境中运行非常流畅。

2. 安装 PyMySQL

PyMySQL 可以通过 Python 的包管理工具 pip 进行安装。打开终端或命令提示符,输入以下命令:

pip install pymysql

安装完成后,你就可以在你的 Python 项目中使用 PyMySQL 了。


3. 连接 MySQL 数据库

要使用 PyMySQL 连接到 MySQL 数据库,你需要提供 MySQL 服务的主机地址、用户名、密码和数据库名等信息。以下是一个连接的简单示例:

import pymysql

# 连接到数据库
connection = pymysql.connect(
    host='localhost',         # MySQL 服务器地址,localhost 表示本地
    user='root',              # 数据库用户名
    password='password123',   # 数据库密码
    database='test_db',       # 要连接的数据库名称
    charset='utf8mb4'         # 字符集(推荐使用 utf8mb4)
)

# 确保连接成功
print("Connected to MySQL Database!")

3.1连接参数详解:

  • host:MySQL 服务器的地址,通常是 'localhost' 或 IP 地址。如果是远程服务器,则需要填写远程服务器的 IP。
  • user:连接 MySQL 数据库的用户名。
  • password:连接数据库的密码。
  • database:指定要操作的数据库。
  • charset:字符集,utf8mb4 是推荐的字符集,支持更多的 Unicode 字符。

4. 执行查询操作

4.1 SELECT 查询

查询数据库通常使用 SELECT 语句。下面是如何在 Python 中执行查询操作并处理返回结果的示例:

# 创建一个游标对象
cursor = connection.cursor()

# 执行 SELECT 查询
cursor.execute("SELECT * FROM users")

# 获取所有结果
results = cursor.fetchall()

# 遍历并打印每一行数据
for row in results:
    print(row)

# 关闭游标
cursor.close()
  • cursor.execute():执行 SQL 语句。
  • cursor.fetchall():获取查询结果的所有记录,返回一个列表,每个元素是数据库表中的一行。

如果只想获取单条记录,可以使用 fetchone() 方法:

cursor.execute("SELECT * FROM users LIMIT 1")
single_row = cursor.fetchone()
print(single_row)

4.2 INSERT 操作

插入数据时,我们使用 INSERT INTO 语句。例如:

cursor = connection.cursor()

# 插入一条数据
sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
values = ('Alice', 28, 'alice@example.com')

cursor.execute(sql, values)

# 提交事务
connection.commit()

print("Record inserted successfully!")

# 关闭游标
cursor.close()
  • cursor.execute(sql, values):执行插入操作,其中 %s 是占位符,values 是一个元组或列表,包含实际的插入值。
  • connection.commit():提交事务,确保数据写入数据库。

4.3 UPDATE 操作

更新数据时,我们使用 UPDATE 语句。例如:

cursor = connection.cursor()

# 更新一条数据
sql = "UPDATE users SET age = %s WHERE name = %s"
values = (30, 'Alice')

cursor.execute(sql, values)

# 提交事务
connection.commit()

print("Record updated successfully!")

# 关闭游标
cursor.close()

4.4 DELETE 操作

删除数据时,我们使用 DELETE FROM 语句。例如:

cursor = connection.cursor()

# 删除一条数据
sql = "DELETE FROM users WHERE name = %s"
value = ('Alice',)

cursor.execute(sql, value)

# 提交事务
connection.commit()

print("Record deleted successfully!")

# 关闭游标
cursor.close()

5. 处理数据库事务

数据库操作可以使用事务来管理。在 PyMySQL 中,默认情况下,数据库操作是自动提交的,但我们可以通过显式地调用 commit() 来提交事务,或者使用 rollback() 来回滚事务。

try:
    cursor = connection.cursor()

    # 执行一些数据库操作
    cursor.execute("UPDATE users SET age = 30 WHERE name = 'Alice'")

    # 如果没有错误,提交事务
    connection.commit()

except Exception as e:
    # 出现错误时回滚事务
    print(f"Error occurred: {e}")
    connection.rollback()

finally:
    cursor.close()

6. 使用游标(Cursor)和提取结果

游标是用于执行 SQL 语句并获取结果的对象。在 PyMySQL 中,我们通常使用游标来执行查询和数据操作。游标提供了如下几种常用方法:

  • fetchall():返回所有查询结果。
  • fetchone():返回查询结果中的第一条记录。
  • fetchmany(size):返回查询结果中的多条记录,size 是返回的条数。

7. 如何使用连接池管理多个数据库连接

对于高并发的应用程序,管理数据库连接池是非常重要的。PyMySQL 本身不支持连接池,但你可以使用其他第三方库来实现连接池,如 DBUtilsSQLAlchemy

例如,使用 DBUtils 创建连接池:

from dbutils.pooled_db import PooledDB
import pymysql

# 创建连接池
pool = PooledDB(
    creator=pymysql,          # 使用 pymysql 作为数据库接口
    maxconnections=5,         # 连接池允许的最大连接数
    host='localhost',
    user='root',
    password='password123',
    database='test_db',
    charset='utf8mb4'
)

# 从连接池获取连接
connection = pool.connection()

# 执行数据库操作
cursor = connection.cursor()
cursor.execute("SELECT * FROM users")
result = cursor.fetchall()
print(result)

# 关闭游标和连接
cursor.close()
connection.close()

8. 异常处理

在数据库操作中,捕获和处理异常非常重要。例如,尝试执行一个 SQL 语句时可能会出现数据库连接失败、SQL 错误等问题。你可以使用 try/except 来捕获这些异常。

try:
    connection = pymysql.connect(
        host='localhost',
        user='root',
        password='wrongpassword',
        database='test_db'
    )
except pymysql.MySQLError as e:
    print(f"Error connecting to MySQL: {e}")

9. 常见问题解答

9.1. 为什么我的 PyMySQL 连接报错?

  • 确保数据库用户名、密码、数据库名、主机地址正确。
  • 检查 MySQL 服务是否已启动。
  • 确保防火墙未阻止 MySQL 连接。

9.2. 如何提高查询性能?

  • 使用索引优化查询。
  • 避免 SELECT *,只查询需要的字段。
  • 分页查询,避免一次性返回大量数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东离与糖宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值