开发者

python操作MySQL的详细教程

开发者 https://www.devze.com 2024-10-10 08:57 出处:网络 作者: 易辰君
目录前言一、Pymysql的特点二、安装三、基本用法(一)连接MySQL数据库(二)数据查询(三)插入数据(四)更新和删除数据(五)事务管理四、游标类型五、安全性六、常见错误处理七、性能优化八、总结前言
目录
  • 前言
  • 一、Pymysql的特点
  • 二、安装
  • 三、基本用法
    • (一)连接MySQL数据库
    • (二)数据查询
    • (三)插入数据
    • (四)更新和删除数据
    • (五)事务管理
  • 四、游标类型
    • 五、安全性
      • 六、常见错误处理
        • 七、性能优化
          • 八、总结

            前言

            PyMySQL 是一个纯 python 的库,用于连接 MySQL 数据库,并执行 SQL 语句。它是 MySQLdb 的替代品,但不同于后者,PyMySQL 不需要 C 语言的依赖,因此更加轻量且易于安装和使用。该库的主要用途是通过 Python 代码与 MySQL 数据库进行交互,比如执行查询、插入数据、更新数据、删除数据等操作。

            一、PyMySQL的特点

            该库的特点主要有以下三点:

            • 纯 Python 实现:不需要依赖 C 扩展库,可以轻松在各类系统上使用,如 Windows、linux、MACOS 等。

            • 兼容性强:支持 MySQL 5.x 和 MySQL 8.x 版本,也兼容 mariadb。

            • 易用性:提供了与 MySQLdb 类似的 API,便于用户从&jsnbsp;MySQLdb 迁移过来。

            二、安装

            PyMySQL 可以通过 pip 轻松安装:

            pip install pymysql
            

            三、基本用法

            (一)连接MySQL数据库

            在使用 PyMySQL 之前,你需要先连接到 MySQL 数据库。连接数据库时,通常需要提供数据库的主机地址、用户名、密码、数据库名等信息。

            示例:

            import pymysql
             
            # 创建连接
            connection = pymysql.connect(
                host='localhost',      # 数据库主机地址
                user='your_username',  # 数据库用户名
                password='your_password', # 数据库密码
                database='your_dbname',   # 选择的数据库
                charset='utf8mb4',     # 指定字符集
                cursorclass=pymysql.cursors.DictCursor  # 返回字典格式的数据
            )
             
            # 创建游标
            cursor = connection.cursor()
             
            # 关闭游标和连接
            cursor.close()
            connection.close()

            (二)数据查询

            使用游标对象来执行 SQL 查询并获取数据。

            示例:

            try:
                # 创建游标
                with connection.cursor() as cursor:
                    # SQL 查询
                    sql = "SELECT * FROM users WHERE age > %s"
                    cursor.execute(sql, (25,))  # 使用参数化查询防止 SQL 注入
                    # 获取结果
                    results = cursor.fetchall()  # 返回所有结果
                    for row in results:
                        print(row)
            finally:
                # 关闭连接
                connection.close()

            (三)插入数据

            执行插入操作时,可以使用 execute() 或 executemany() 方法。

            示例:

            try:
                with connection.cursor() as cursor:
                    # SQL 插入语句
                    sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
                    # 执行单条插入
                    cursor.execute(sql, ('John Doe', 30, 'john.doe@example.com'))
                    
                    # 执行多条插入
                    users = [
                        ('Alice', 25, 'alice@example.com'),
                        ('Bob', 28, 'bob@example.com')
                    ]
                    cursor.executemany(sql, users)
                
                # 提交更改
                connection.commit()
            finally:
                connection.close()

            (四)更新和删除数据

            类似于插入数据,更新和删除数都是通过 SQL 语句和 execute()&nbsfoWjFnuMgp;函数来完成。

            • 更新数据

            示例:

            try:
                with connection.cursor() as cursor:
                    # SQL 更新语句
                    sql = "UPDATE users SET email = %s WHERE name = %s"
                    cursor.execute(sql, ('new.email@example.com', 'John Doe'))
                
                # 提交更改
                connection.commit()
            finally:
                connection.close()
            • 删除数据

            示例:

            try:
                with connection.cursor() as cursor:
                    # SQL 删除语句
                    sql = "DELETE FROM users WHERE name = %s"
                    cursor.execute(sql, ('John Doe',))
                
                # 提交更改
                connection.commit()
            finally:
                connection.close()

            (五)事务管理

            MySQL 数据库支持事务,PyMySQL 默认启用了自动提交。如果你需要手动控制事务,可以关闭自动提交并在合适的时机提交或回滚。

            示例:

            try:
                # 关闭自动提交
                connection.autocommit(False)
             
                with connection.cursor() as cursor:
                    # SQL 插入语句
                    sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
                    cursor.execute(sql, ('Chris', 27, 'chris@example.com'))
             
                    # 人为错误,测试回滚
                    raise Exception("人为触发异常")
             
                # 提交事务
                connection.commit()
            except Exception as e:
                print(f"出现错误: {e}")
                # 回滚事务
                connection.rollback()
            finally:
                connection.close()

            四、游标类型

            PyMySQL 提供了多种游标类型,适用于不同的场景:

            • 默认游标:返回元组格式的结果。

            • 字典游标 (DictCursor):返回字典javascript格式的结果,字段名作为键。

            • SSCursor:流式游标,用于处理大数据量时,避免一次性加载大量数据到内存。

            使用不同游标类型可以通过 cursorclass 参数指定。例如:

            # 字典游标
            connection = pymysql.connect(
                host='localhost',
                user='your_usernamejs',
                password='your_password',
                database='your_dbname',
                charset='utf8mb4'www.devze.com,
                cursorclass=pymysql.cursors.DictCursor  # 使用字典游标
            )

            五、安全性

            为了防止 SQL 注入攻击,务必使用参数化查询,而不是将参数直接拼接到 SQL 字符串中。

            示例:

            # 不安全的写法
            sql = f"SELECT * FROM users WHERE name = '{name}'"  # 容易导致 SQL 注入
             
            # 安全的写法
            sql = "SELECT * FROM users WHERE name = %s"
            cursor.execute(sql, (name,))

            六、常见错误处理

            PyMySQL 中常见的错误处理可以通过捕获异常来完成:

            import pymysql
             
            try:
                connection = pymysql.connect(host='localhost', user='root', password='', database='test_db')
                cursor = connection.cursor()
            except pymysql.MySQLError as e:
                print(f"数据库连接失败: {e}")

            七、性能优化

            • 使用批量操作:如插入数据时,使用 executemany() 批量插入,减少数据库的交互次数。

            • 连接池:在大规模应用中,可以通过第三方库如 DBUtils 或 SQLAlchemy 提供的连接池来优化数据库连接的复用性。

            • 流式查询:对于大规模查询,使用 SSCursor 流式游标,避免一次性加载所有数据到内存。

            八、总结

            PyMySQL 是一个轻量级、易于使用的 Python 库,适合 Python 程序员与 MySQL 数据库进行交互。通过它,你可以高效地执行 SQL 查询、插入、更新和删除数据操作,同时还可以利用其事务支持、游标控制等高级功能。

            以上就是python操作MySQL的详细教程的详细内容,更多关于python操作MySQL的资料请关注编程客栈(www.devze.com)其它相关文章!

            0

            精彩评论

            暂无评论...
            验证码 换一张
            取 消

            关注公众号