Python 数据库 ORM 实战:SQLAlchemy 详解

Python 数据库 ORM 实战:SQLAlchemy 详解

1. 背景与动机

ORM(对象关系映射)简化了数据库操作,使开发者可以使用面向对象的方式操作数据库。SQLAlchemy 是 Python 最强大的 ORM 工具,提供了灵活且功能丰富的数据库操作接口。

2. 基础配置

python 复制代码
from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from datetime import datetime

engine = create_engine('postgresql://user:password@localhost/dbname')
Base = declarative_base()
Session = sessionmaker(bind=engine)

3. 模型定义

python 复制代码
class User(Base):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True)
    username = Column(String(80), unique=True, nullable=False)
    email = Column(String(120), unique=True)
    created_at = Column(DateTime, default=datetime.utcnow)
    
    def __repr__(self):
        return f'<User {self.username}>'

# 创建表
Base.metadata.create_all(engine)

4. CRUD 操作

python 复制代码
session = Session()

# 创建
new_user = User(username='alice', email='alice@example.com')
session.add(new_user)
session.commit()

# 查询
user = session.query(User).filter_by(username='alice').first()
users = session.query(User).filter(User.id > 5).all()

# 更新
user.email = 'new_email@example.com'
session.commit()

# 删除
session.delete(user)
session.commit()

session.close()

5. 高级查询

python 复制代码
from sqlalchemy import func, and_, or_

# 聚合查询
result = session.query(
    func.count(User.id),
    func.max(User.created_at)
).first()

# 联合查询
from sqlalchemy.orm import joinedload

users_with_posts = session.query(User).options(
    joinedload(User.posts)
).all()

# 分页
users = session.query(User).offset(10).limit(10).all()

6. 性能优化

python 复制代码
# 连接池配置
engine = create_engine(
    'postgresql://user:password@localhost/dbname',
    pool_size=10,
    max_overflow=20,
    pool_pre_ping=True
)

# 批量插入
session.bulk_save_objects([User(username=f'user{i}') for i in range(1000)])
session.commit()

7. 结论

SQLAlchemy 提供了从简单到复杂的数据库操作能力,通过 ORM 可以显著提高开发效率,同时保持对 SQL 的灵活控制。

相关推荐
悦来客栈的老板5 小时前
AI逆向|猿人学逆向反混淆练习平台第七题加密分析
人工智能
KOYUELEC光与电子努力加油5 小时前
JAE日本航空端子推出支持自走式机器人的自主充电功能浮动式连接器“DW15系列“方案与应用
服务器·人工智能·机器人·无人机
萤火阳光5 小时前
13|自定义 Skill 创作:打造专属自动化利器
人工智能
我哪会这个啊5 小时前
SpringAlibaba Ai基础入门
人工智能
智算菩萨5 小时前
【Pygame】第8章 文字渲染与字体系统(支持中文字体)
开发语言·python·pygame
:mnong5 小时前
全图纸语义理解升级分析
python·openvino·paddleocr·qt6.3·paddleocr-vl
qh0526wy6 小时前
pathlib 核心功能一览
python
tianbaolc6 小时前
Claude Code 源码剖析 模块一 · 第六节:autoDream 自动记忆整合
人工智能·ai·架构·claude code
Hello eveybody6 小时前
PyCharm性能调优避坑录
python·pycharm
蓝色的杯子6 小时前
从 LLM 到 Agent Skill,龙虾的技术基础 · ② Token
人工智能