Python爬虫(9)Python数据存储实战:基于pymysql的MySQL数据库操作详解

06-02 1468阅读

目录

      • 一、背景与核心价值
      • 二、pymysql核心操作详解
        • 2.1 环境准备
        • 2.2 数据库连接与基础操作
        • 2.3 事务处理与错误回滚
        • 2.4 高级功能:批量插入与性能优化
        • 三、pymysql进阶技巧
          • 3.1 连接池管理(推荐使用DBUtils)
          • 3.2 SQL注入防御
          • 3.3 与ORM框架对比
          • 四、总结与最佳实践
            • 4.1 技术选型建议‌:
            • 4‌.2 性能优化方向‌:
            • 4.3 避坑指南‌:
            • Python爬虫相关文章(推荐)

              一、背景与核心价值

              在数据驱动的互联网时代,数据存储技术是构建应用系统的基石。文件存储(如TXT/CSV)适合简单场景,但面临并发性差、查询效率低等问题。‌MySQL作为关系型数据库的典型代表‌,凭借其开源、高性能、事务支持等特性,成为Web应用、数据分析等领域的主流存储方案。

              ‌为什么选择pymysql?‌

              作为Python连接MySQL的轻量级库,pymysql提供纯Python实现,兼容MySQLdb API,支持Python 3.x,规避了旧库的环境依赖问题,是Python开发者操作MySQL的首选工具。

              二、pymysql核心操作详解

              2.1 环境准备
              # 安装pymysql(需提前安装MySQL服务)
              pip install pymysql
              
              2.2 数据库连接与基础操作
              import pymysql
              # 建立数据库连接
              conn = pymysql.connect(
                  host='localhost',
                  user='root',
                  password='your_password',
                  database='test_db',
                  charset='utf8mb4',
                  cursorclass=pymysql.cursors.DictCursor  # 返回字典格式数据
              )
              try:
                  with conn.cursor() as cursor:
                      # 创建数据表
                      sql_create = """
                      CREATE TABLE IF NOT EXISTS users (
                          id INT AUTO_INCREMENT PRIMARY KEY,
                          name VARCHAR(50) NOT NULL,
                          email VARCHAR(100) UNIQUE
                      )
                      """
                      cursor.execute(sql_create)
                      
                      # 插入数据(参数化查询防止SQL注入)
                      sql_insert = "INSERT INTO users (name, email) VALUES (%s, %s)"
                      cursor.execute(sql_insert, ('Alice', 'alice@example.com'))
                  
                  # 提交事务
                  conn.commit()
                  
                  # 查询数据
                  with conn.cursor() as cursor:
                      sql_select = "SELECT * FROM users WHERE name = %s"
                      cursor.execute(sql_select, ('Alice',))
                      result = cursor.fetchone()
                      print(result)  # 输出:{'id': 1, 'name': 'Alice', 'email': 'alice@example.com'}
              finally:
                  conn.close()  # 关闭连接
              
              2.3 事务处理与错误回滚
              try:
                  conn.begin()  # 显式开启事务
                  # 执行多个操作...
                  conn.commit()
              except Exception as e:
                  conn.rollback()  # 发生错误时回滚
                  print(f"操作失败: {e}")
              
              2.4 高级功能:批量插入与性能优化
              data = [('Bob', 'bob@test.com'), ('Charlie', 'charlie@test.com')]
              sql = "INSERT INTO users (name, email) VALUES (%s, %s)"
              with conn.cursor() as cursor:
                  cursor.executemany(sql, data)  # 批量插入提升效率
              conn.commit()
              

              三、pymysql进阶技巧

              3.1 连接池管理(推荐使用DBUtils)
              from dbutils.pooled_db import PooledDB
              pool = PooledDB(
                  creator=pymysql,
                  host='localhost',
                  user='root',
                  password='your_password',
                  database='test_db',
                  maxconnections=10  # 控制并发连接数
              )
              
              3.2 SQL注入防御
              • 必须使用参数化查询‌(如%s占位符),避免直接拼接SQL字符串。
                3.3 与ORM框架对比
                场景说明
                配置文件存储程序参数、路径配置等(如config.json)
                API数据交互前后端通过JSON格式传递请求与响应
                结构化日志记录记录带元数据的操作日志,便于后续分析

                四、总结与最佳实践

                4.1 技术选型建议‌:
                1. 小型项目或需要精细控制SQL时,pymysql是轻量高效的解决方案
                2. 中大型项目建议结合ORM框架(如SQLAlchemy)提升开发效率
                4‌.2 性能优化方向‌:
                1. 使用连接池减少连接开销
                2. 批量操作代替单条提交
                3. 合理设计索引提升查询速度
                4.3 避坑指南‌:
                1. 始终在finally块中关闭连接
                2. 生产环境避免使用root账户
                3. 定期备份数据库并监控慢查询日志
                Python爬虫相关文章(推荐)
                Python爬虫介绍Python爬虫(1)Python爬虫:从原理到实战,一文掌握数据采集核心技术
                HTTP协议解析Python爬虫(2)Python爬虫入门:从HTTP协议解析到豆瓣电影数据抓取实战
                HTML核心技巧Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素
                CSS核心机制Python爬虫(4)CSS核心机制:全面解析选择器分类、用法与实战应用
                静态页面抓取实战Python爬虫(5)静态页面抓取实战:requests库请求头配置与反反爬策略详解
                静态页面解析实战Python爬虫(6)静态页面解析实战:BeautifulSoup与lxml(XPath)高效提取数据指南
                Python数据存储实战 CSV文件Python爬虫(7)Python数据存储实战:CSV文件读写与复杂数据处理指南
                Python数据存储实战 JSON文件Python爬虫(8)Python数据存储实战:JSON文件读写与复杂结构化数据处理指南
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码