SQLAlchemy 是 Python 领域最流行的对象关系映射(ORM)框架之一,它提供了高效且灵活的数据库操作方式。通过本文,我们将深入探讨如何使用 SQLAlchemy ORM 进行实际的数据库交互。
安装依赖
首先确保安装核心库及对应数据库的驱动:
pip install sqlalchemy
针对不同数据库,还需安装相应的驱动程序:
# PostgreSQL
pip install psycopg2-binary
# MySQL
pip install mysql-connector-python
# SQLite (Python 标准库已包含,无需额外安装)
核心概念梳理
在使用之前,理解几个关键组件有助于后续开发:
- Engine:数据库连接引擎,负责与数据库通信及管理连接池。
- Session:会话对象,管理所有持久化操作,相当于一个临时的工作单元。
- Model:数据模型类,直接对应数据库中的表结构。
- Query:查询构建器,用于动态生成和执行 SQL 查询。
建立数据库连接
初始化引擎和会话工厂是第一步。这里以 SQLite 为例,PostgreSQL 或 MySQL 只需修改 URL 即可:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
# 创建数据库连接引擎,echo=True 可打印生成的 SQL 语句便于调试
engine = create_engine('sqlite:///example.db', echo=True)
# 创建会话工厂
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# 创建会话实例
session = SessionLocal()
定义数据模型
模型类继承自 Base,通过 Column 定义字段属性。以下示例展示了用户、文章及标签之间的多对多关系:
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, declarative_base
# 创建基类
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=, index=)
name = Column(String(), nullable=)
email = Column(String(), unique=, index=)
posts = relationship(, back_populates=)
():
__tablename__ =
= Column(Integer, primary_key=, index=)
title = Column(String(), nullable=)
content = Column(String())
author_id = Column(Integer, ForeignKey())
author = relationship(, back_populates=)
tags = relationship(, secondary=, back_populates=)
():
__tablename__ =
= Column(Integer, primary_key=, index=)
name = Column(String(), unique=, nullable=)
posts = relationship(, secondary=, back_populates=)
():
__tablename__ =
post_id = Column(Integer, ForeignKey(), primary_key=)
tag_id = Column(Integer, ForeignKey(), primary_key=)

