1. SQLAlchemy ORM 核心概念解析
SQLAlchemy 作为 Python 生态中最强大的 ORM 工具之一,其设计哲学是"SQL 表达式语言与 ORM 的完美结合"。不同于 Django ORM 的全封装模式,SQLAlchemy 始终保持着对原生 SQL 的友好访问能力,这种"不放弃底层控制权"的特性使其成为复杂数据库操作场景的首选方案。
1.1 核心组件架构
Engine 引擎是 SQLAlchemy 的心脏,它实际上是一个连接池的智能管理器。当执行第一个查询时才会建立实际数据库连接,这种延迟加载机制能有效节省资源。生产环境中建议配置连接池参数:
python复制engine = create_engine(
'postgresql://user:pass@localhost/dbname',
pool_size=20, # 保持的连接数
max_overflow=10, # 允许临时超过pool_size的连接数
pool_timeout=30, # 获取连接的超时时间(秒)
pool_recycle=3600 # 连接自动回收时间(秒)
)
Session 会话是工作单元模式(Unit of Work)的实现载体。它跟踪所有对象变更,在调用 commit() 时一次性将所有变更以事务形式提交。关键特性包括:
- 默认开启事务,直到 commit() 或 rollback() 才会结束
- expire_on_commit=True 时,commit 后所有对象属性会过期,下次访问时自动重新查询
- autoflush=True 时,查询前会自动执行 pending 的变更
1.2 声明式模型定义
SQLAlchemy 2.0 推荐使用 declarative_base() 方式定义模型,这种声明式语法比传统的 Table + mapper 方式更简洁:
python复制from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass # 可在此定义公共字段或方法
class User(Base):
__tablename__ = 'users'
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(30))
# 类型注解在2.0中成为推荐做法
注意:在生产环境中,建议为所有字符串字段明确指定长度(如 String(50)),这不仅是良好的文档习惯,也能避免不同数据库的兼容性问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据库连接与配置实战
2.1 多数据库连接策略
大型项目往往需要连接多个数据库,可通过创建多个 Engine 实例实现:
python复制# 主库写操作
master_engine = create_engine('mysql+mysqlconnector://master_user:pass@master-host:3306/db')
# 从库读操作
slave_engine = create_engine('mysql+mysqlconnector://slave_user:pass@slave-host:3306/db')
# 按读写分离会话
class RoutingSession(Session):
def get_bind(self, mapper=None, clause=None):
if self._flushing: # 写操作使用主库
return master_engine
return slave_engine
