一、sqlalchemy简介
SQLAlchemy 是一个强大的 Python 数据库工具集,它提供了一套完整的数据库访问方案。它通过多个层次来实现其功能,这些层次提供了灵活且强大的数据库操作能力。
1、SQLAlchemy的底层分层
Engine(引擎)
- 角色:Engine 是 SQLAlchemy 的核心,通过它可以连接到数据库并执行 SQL 语句。
- 功能:它是一个用于管理数据库连接的接口,并负责生成与数据库交互的Connection对象。
- 创建:通常通过
create_engine()
函数来创建,使程序能够接入相应的数据库。
Connection Pooling(连接池)
- 角色:连接池用于管理一组数据库连接以供重复使用。
- 功能:通过复用已有的数据库连接,减少连接开销,提高应用的性能和效率。
- 实现:SQLAlchemy 提供了一些连接池实现,如 QueuePool(默认)、SingletonThreadPool 等,用户可以通过配置参数进行定制。
Dialect(方言)
-
角色:Dialect 用于处理不同数据库之间的特定差异。
-
功能:它管理与特定数据库的通信,决定如何执行 SQL、翻译 SQL 为数据库特定的语言、处理特定的数据类型和连接设置。
-
支持:SQLAlchemy 支持多种数据库方言,包括 SQLite、MySQL、PostgreSQL、Oracle、SQL Server 等。选择方言通过在连接字符串中指定合适的数据库驱动:
-
如 "mysql+pymysql://user:password@host/db"
Schema/Types(架构和类型)
- 角色:Schema/Types 层次定义数据库表的结构和列的数据类型。
- 功能:它用于映射 Python 对象到数据库表,并支持定义和操作数据库的结构。
- 组件:包括
Table
、Column
等元素,以及丰富的内置数据类型如Integer
、String
、DateTime
,也允许自定义数据类型。
SQL Expression Language(SQL 表达式语言)
-
角色:提供了一个灵活的 SQL 构建器,使得可以用 Python 对象来构建 SQL 语句。
-
功能:它是一个抽象层,允许开发者通过 Python 的语法来构建复杂的 SQL 查询,而不需要手写 SQL。
-
使用:用户可以通过表达式构建器来拼凑 SQL 语句,然后交给引擎执行。例如:
- from sqlalchemy import select
- stmt = select([users_table]).where(users_table.c.id == 42)
- result = connection.execute(stmt)
SQLAlchemy 的分层结构通过 Engine 连接数据库、使用 Connection Pooling 管理连接、依赖 Dialect 处理数据库差异、通过 Schema/Types 进行数据库建模,并使用 SQL Expression Language 构建和执行表达式。这种设计使 SQLAlchemy 成为功能丰富且灵活的数据库访问工具,适用于广泛的开发需求。
2、
3、
二、
三、