SQLAlchemy 2 In Practice - Chapter 2 - Database Tables
a day ago
- SQLAlchemy 分为 Core 和 ORM 模块;Core 处理数据库集成和 SQL 生成,而 ORM 为 Python 对象提供抽象层。
- 数据库表被定义为继承自声明性基类(例如 Model)的 Python 类,列使用 Mapped 和 mapped_column 进行类型化。
- MetaData 对象管理表定义;其 create_all() 和 drop_all() 方法创建或删除表,但迁移需要 Alembic 来进行更改。
- 会话管理模型实例和数据库事务;可以提交或回滚,最佳实践是使用 sessionmaker 的上下文管理器。
- 查询使用 select() 与模型类,通过 session.execute() 或 session.scalars() 执行;过滤器使用 where() 和 Python 运算符,结果可以是元组或标量。
- 常见查询功能包括过滤器(例如 LIKE、BETWEEN)、排序(order_by)、聚合(count、min、max)、分组(group_by 与 having)和分页(limit/offset 或基于游标)。
- 索引提高在 where/order_by/group_by 中使用的列的查询性能;列可以通过 mapped_column 中的 index=True 进行索引。
- 约束如 PRIMARY KEY、UNIQUE 和 NOT NULL 强制执行数据完整性;NOT NULL 是 Mapped 列的默认值;可选列使用 Mapped[Optional[t]]。
- 对象通过 add() 添加到会话,通过 delete() 删除;更改在 commit() 后永久生效。
- 示例练习包括按年份、CPU 类型、制造商前缀查询,以及按年份或国家聚合计数。