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

相关推荐
镜象科技1 小时前
AI情感大模型应用场景全解:从校园到医院再到企业的落地地图
人工智能
Joshua-a2 小时前
工程数学-理解卷积的含义_线性时不变系统的冲激响应与卷积
人工智能·深度学习
song5012 小时前
React Native for OpenHarmony 实战:三方库 react-native-css-transformer 的鸿蒙化适配指南
css·人工智能·深度学习·react native·transformer
老金带你玩AI6 小时前
ChatGPT dots,到底能替你操多少心?
人工智能
AliCloudROS7 小时前
计算巢 X DeepSeek Harness — 云端智能体工作台
人工智能·阿里云
深蓝AI7 小时前
GitHub的Push一年涨4.9倍:AI Agent为什么逼它重做Git存储?
人工智能·github
stereohomology7 小时前
大模型的观点谨:StoryTold 「Crafting Apps」四件套 · 深度总览
人工智能·llm
运维行者_8 小时前
网络性能监控怎么做?从自动发现到根因分析的4个环节
运维·服务器·网络·人工智能·支持向量机
Su米苏8 小时前
Spring AI 中MCP 与普通 @Tool的区别
java·人工智能·spring
美狐美颜sdk8 小时前
直播APP源码可以直接接入视频美颜sdk吗?技术方案详解
android·人工智能·音视频·美颜sdk·直播美颜sdk