SQLAlchemy:Python 数据库操作的工业级方案

SQLAlchemy 在 GitHub 上积累了超过 11,000 Star,是 Python 生态中历史最久、使用最广的数据库工具库之一。

正文顶部截图

README区域截图

SQLAlchemy 是一套完整的 Python SQL 工具集,同时提供 ORM 和底层 SQL 构建两大能力。开发者可以根据项目规模灵活选择使用方式。

ORM 功能

SQLAlchemy 的 ORM 基于身份映射、工作单元和数据映射器模式构建。开发者通过声明式配置定义数据模型,对象的增删改查会自动同步到当前事务中。

查询系统覆盖了 SQL 的全部能力,包括连接、子查询、关联查询等。ORM 查询使用关系组合的方式编写,与手写 SQL 的思路一致。需要时也可以直接嵌入原生 SQL。

关联数据的加载策略也很灵活。集合可以在首次访问时按需加载,也可以通过连接查询一次性加载,或者为每个集合单独发起查询。

Core 层

SQLAlchemy Core 独立于 ORM,是一套完整的数据库抽象层。它包含可扩展的 SQL 表达式语言、元数据管理、连接池、类型转换和自定义类型系统。

所有主键和外键约束都按复合键和自然键处理。虽然自增整数主键仍是常见做法,但 SQLAlchemy 不会对此做硬性假设。

数据库结构可以通过反射一次性转换为 Python 元数据结构,这些结构也能反向生成 CREATE 语句,全程不依赖 ORM。

设计理念

SQLAlchemy 的几个核心原则值得关注:

数据库在规模和性能要求变高时,行为越来越不像对象集合;对象集合在抽象层级提升时,行为也越来越不像表和行。SQLAlchemy 试图同时兼容这两种场景。

ORM 不必隐藏关系模型的能力。关系数据库提供了丰富的集合运算功能,应当被充分暴露。SQLAlchemy 的 ORM 提供开放的机制,让开发者在领域模型和关系模式之间构建自定义的映射层。

开发者始终掌控对象模型和数据库结构的设计决策,SQLAlchemy 只负责自动执行这些决策。

SQLAlchemy 由 Core 和独立的 ORM 组件构成。如果问题不需要 ORM,可以直接使用 Core 的 SQL 表达式语言,它能把 Python 结构渲染为目标数据库的 SQL 字符串,返回的结果集本质上是增强版的 DBAPI 游标。

事务应当是常态。使用 ORM 时,数据在调用 commit() 之前不会进入持久存储。绑定参数被最大程度使用,查询优化器可以有效缓存查询计划,SQL 注入也不是问题。

安装

通过 pip 安装:

pip install sqlalchemy

基础使用

定义模型:

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)

执行查询:

Session = sessionmaker(bind=engine)
session = Session()

user = session.query(User).filter_by(name='Alice').first()

SQLAlchemy 支持所有主流关系型数据库,包括 PostgreSQL、MySQL、SQLite、Oracle 和 SQL Server。文档完善,社区活跃,适合从小型脚本到大型 Web 应用的各种场景。

PostgreSQL、MySQL、SQLite、Oracle 和 SQL Server。文档完善,社区活跃,适合从小型脚本到大型 Web 应用的各种场景。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐