SQL炼金术
Python SQL 工具包和对象关系映射器
介绍
SQLAlchemy 是 Python SQL 工具包和对象关系映射器,为应用程序开发人员提供 SQL 的全部功能和灵活性。 SQLAlchemy 提供了一整套众所周知的企业级持久化模式,专为高效、高性能的数据库访问而设计,并适应于简单且 Python 的领域语言。
SQLAlchemy 的主要功能包括:
- 工业级 ORM,以身份映射、工作单元和数据映射器模式为核心构建。这些模式允许使用声明性配置系统透明地持久化对象。领域模型可以自然地构建和操作,并且更改会自动与当前事务同步。
- 面向关系的查询系统,显式地公开 SQL 的全部功能,包括连接、子查询、关联以及对象模型方面的大多数其他功能。使用 ORM 编写查询使用的关系组合技术与编写 SQL 时使用的技术相同。虽然您可以随时使用文字 SQL,但实际上从来不需要它。
- 一个全面且灵活的相关集合和对象的预加载系统。集合缓存在会话中,并且可以在单独访问时加载,使用联接一次性加载,或者通过跨完整结果集的每个集合查询来加载。
- 一个Core SQL构建系统和DBAPI交互层。 SQLAlchemy Core 与 ORM 分离,本身就是一个完整的数据库抽象层,并且包括可扩展的基于 Python 的 SQL 表达式语言、模式元数据、连接池、类型强制和自定义类型。
- 所有主键和外键约束都被假定为复合的和自然的。代理整数主键当然仍然是常态,但 SQLAlchemy 从未假设或硬编码到此模型。
- 数据库自省和生成。数据库模式可以一步“反映”为表示数据库元数据的 Python 结构;然后,这些相同的结构可以立即生成 CREATE 语句 - 全部在 Core 内,独立于 ORM。
SQLAlchemy 的理念:
- 随着大小和性能变得越来越重要,SQL 数据库的行为越来越不像对象集合;随着抽象变得越来越重要,对象集合的行为越来越不像表和行。 SQLAlchemy 旨在适应这两个原则。
- ORM 不需要隐藏“R”。关系数据库提供了丰富的、基于集合的功能,应该完全公开这些功能。 SQLAlchemy 的 ORM 提供了一组开放式模式,允许开发人员在域模型和关系模式之间构建自定义中介层,从而将所谓的“对象关系阻抗”问题变成遥远的记忆。
- 在所有情况下,开发人员都做出有关对象模型和关系模式的设计、结构和命名约定的所有决策。 SQLAlchemy 仅提供自动执行这些决策的方法。
- 使用 SQLAlchemy,不存在“ORM 生成错误查询”之类的情况 - 您保留对查询结构的完全控制,包括如何组织联接、如何使用子查询和相关性、请求哪些列。 SQLAlchemy 所做的一切最终都是开发人员发起决策的结果。
- 如果问题不需要 ORM,则不要使用 ORM。 SQLAlchemy 由核心和独立的 ORM 组件组成。 Core 提供了完整的 SQL 表达式语言,允许使用 Pythonic 构建 SQL 结构,直接呈现为目标数据库的 SQL 字符串,返回本质上是增强型 DBAPI 游标的结果集。
- 交易应该成为常态。使用 SQLAlchemy 的 ORM,在调用 commit() 之前,不会有任何内容进入永久存储。 SQLAlchemy 鼓励应用程序创建一致的方法来描述一系列操作的开始和结束。
- 切勿在 SQL 语句中呈现文字值。最大程度地使用绑定参数,使查询优化器能够有效地缓存查询计划,并使 SQL 注入攻击不再成为问题。
文档
最新文档位于:
https://www.sqlalchemy.org/docs/
安装/要求
完整的安装文档位于安装部分。
获取帮助/开发/错误报告
请参阅 SQLAlchemy 社区指南。
行为守则
最重要的是,SQLAlchemy 非常强调用户和开发人员之间礼貌、深思熟虑和建设性的沟通。请参阅行为准则中我们当前的行为准则。
执照
SQLAlchemy 在 MIT 许可证下分发。