爬虫工作量由小到大的思维转变---<第九章 Scrapy存储的选择(sql)>

前言:

 顺着讲,就是到了存储模块了;拿到item之后,进行一番数据清理是必不可少的,但是,转存到sql需要考虑哪些事情呢?

正文:

-选择哪个库进行sql的存储?

`mysqlclient` 和 `pymysql` 是两个流行的Python库,它们都是 MySQL 数据库的适配器,用于在Python应用程序与MySQL服务器之间进行通信。以下是他们各自的特点和优势:

mysqlclient:

  1. - 本质: `mysqlclient` 是MySQLdb的分支,它是Python的C扩展,因此需要预先安装MySQL的C开发库。
  2. -性能: 作为一个C扩展,`mysqlclient` 通常提供比 `pymysql` 更好的性能,特别是在处理大量数据或需要高并发时效果更显著。
  3. - 兼容性:`mysqlclient` 与Python的数据库API规范DB-API 2.0良好兼容。
  4. - 支持:支持Python 2 和 Python 3。

PyMySQL:

  1. - 本质: `pymysql` 是一个纯Python写的MySQL客户端库,不需要依赖外部的C语言库或者Python的C扩展。
  2. - 易安装: 由于是纯Python实现,`pymysql` 对于安装环境的要求更低,不需要编译,只需简单的 `pip install` 就可以完成安装。
  3. - 便携性: 由于不依赖于特定的C库,`pymysql` 在跨平台使用时更加灵活。
  4. -开发便利: 如果你正在开发一个纯Python项目,并希望避免复杂的依赖和编译环节,可以选择 `pymysql`。
  5. - 功能: 同样遵循DB-API 2.0规范,并且由于是纯Python,修改和阅读源码相对更容易。对异步框架如`asyncio`的支持也更好。

总结:

  1. 如果你需要最佳性能,并且能够在你的环境中轻松地安装C扩展,那么 mysqlclient 通常是更好的选择。
  2. 如果你优先考虑开发便利性和跨平台部署,或者你使用的是PyPy这类对C扩展支持不友好的Python实现,那么 pymysql 可能会更适合你。
  3. 异步支持:如果你的应用程序使用 asyncio 或其他异步IO库,那么你可能要考虑 pymysql 或者其他支持异步的MySQL库,因为 mysqlclient 不支持异步IO。
  4. 环境限制:在某些受限的环境(如共享主机),可能没有权限安装 mysqlclient 所需的依赖或无法编译C扩展,那么 pymysql 就是不错的选择。

--------------------------------------------个人推荐:pymysql-------------------------------------------

`SQLAlchemy` 和 `PyMySQL` 之间如何适配,或者如何配合?

PyMySQL

  1. - 类型: `PyMySQL` 是一个数据库适配器,提供了纯Python编写的MySQL客户端功能。
  2. - 作用: 它直接实现了MySQL数据库的网络协议,允许你在Python中直接执行SQL语句、管理数据库连接以及处理查询结果。
  3. - 用途:如果你想要以比较底层和直接的方式执行SQL查询,你可能会选择使用 `PyMySQL`。它遵循Python的DB-API 2.0规茨,并允许用户直接用Python编写的SQL代码与MySQL数据库交互。

SQLAlchemy

  1. - 类型:`SQLAlchemy` 是一个全栈数据库工具包和ORM(对象关系映射器)。
  2. - 作用: ORM层允许你用Python类和对象来代表和操作数据库架构和数据。它还提供了一个强大的查询生成器,允许你以更Pythonic的方式构建SQL查询,而不需要编写原始的SQL代码。
  3. - 用途:`SQLAlchemy` 的核心是一个数据库连接和表达式语言工具集,可以独立于ORM使用。
  4. -功能丰富:不仅提供了底层数据库访问功能,还支持连接池、数据模型映射、数据迁移(通过Alembic)、事务处理等。
  5. -灵活性:你可以用声明式或经典的方法来利用它的ORM功能,或者如果你更喜欢直接的方式,也可以用它的SQL表达式语言来构建查询。这意味着它既支持高级的抽象,又支持必要时直接执行SQL。
虽然 SQLAlchemy 和 PyMySQL 是截然不同的库,但它们可以协同工作。实际上,SQLAlchemy 可以使用 PyMySQL 作为它的数据库驱动:

协同工作:你可以在 SQLAlchemy 的Engine配置中指定 PyMySQL 作为MySQL数据库的连接方法。这样,你就能结合使用 SQLAlchemy 的高层ORM和方便的API,同时又保留了 PyMySQL 作为与数据库沟通的途径。
from sqlalchemy import create_engine

# 例如,使用 PyMySQL 与 SQLAlchemy 结合连接数据库
engine = create_engine('mysql+pymysql://username:password@host:port/database')
在选择两者之间时,这里有一点指导原则:

  1. 如果你想快速进行原型设计或构建应用程序,而不想直接处理SQL语句,那么 SQLAlchemy 和它的ORM层可以为你节省大量时间和工作。
  2. 如果你需要与数据库交互的细节控制,比如编写高度优化的SQL,或者如果ORM带来的开销对你的应用来说是不可接受的,那么直接使用 PyMySQL 或者 SQLAlchemy 的核心部分可能更合适。
  3. 在开发小型项目 或者学习的过程中,仅用 PyMySQL 可能更简单明了,因为它减少了层与抽象。

总结:

SQLAlchemy 为开发者提供了一个更高级别的数据库操作抽象,而 PyMySQL 则提供了更直白的数据库操作体验!!!

你可能感兴趣的:(15天玩转高级python,scrapy,sql,数据库,爬虫)