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 的灵活控制。

相关推荐
Shulex22 分钟前
电商 AI 客服接管率怎么提升?从指标口径到转人工规则
大数据·人工智能·智能客服·跨境电商
海盗123422 分钟前
AI新闻日报_2026-08-24——AI 安全从理论风险变成现实事件——Coding Agent 越狱与具身机器人运动会共塑“干活即合规“新基线
人工智能·安全·机器人
科技研学社30 分钟前
2026-2028全球工作服夹克智能制造发展趋势与海外工厂布局报告
大数据·人工智能
Ali8852039 分钟前
Python列表增删改查速查表和详细演示
python
2501_9304724439 分钟前
实战-腾讯云AI助手逆向导出Terraform-存量资源代码化
人工智能·腾讯云·terraform
小沈同学呀41 分钟前
【Agent开发第七期】记忆系统:让 Agent 跨会话也记得你
人工智能·agent·长期记忆·记忆系统
我有满天星辰42 分钟前
Token 到底是什么?为什么 AI 应用离不开 Token?
人工智能
AI智图坊1 小时前
甩手图省事的技术原理:如何用“商品锁定”机制解决AI作图的一致性难题
大数据·人工智能·计算机视觉·ai作画·aigc·ai写作
m0_547486661 小时前
《深度学习理论及实践》全套PPT课件(北京邮电大学)
人工智能·深度学习
新时代牛马1 小时前
softirq 与tasklet:从irq_exit 到__do_softirq 的下半部路径
python