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

相关推荐
财迅通Ai13 分钟前
远信储能(9621.HK)招股开启,AI+储能跑出新范式
大数据·人工智能·远信储能
卡提西亚20 分钟前
FastAPI基础入门
python·fastapi
老金带你玩AI24 分钟前
一人公司,单月收入近10万,我做了这三门生意(OPC系列-3)
人工智能
水如烟24 分钟前
孤能子视角:AI不是“东西”,是认知库重整理交互系统——从李飞飞“不知道AGI和AI的区别在哪里”说起:知识增量与应用增量是两个判据层
人工智能
云-缩影26 分钟前
拆解函数计算 Serverless GPU 部署 AI 模型:Flux 生图和语音复刻怎么跑的
人工智能·云原生·serverless
zcg194235 分钟前
通过UE制作segment和depth数据
人工智能·深度学习
fanruitian35 分钟前
python 机器学习 ML LinearRegression KNN KMeans
python·机器学习·kmeans
一只鹿鹿鹿39 分钟前
智算算力、AI-芯片与产品解析(PPT文件)
大数据·运维·网络·人工智能·物联网·1024程序员节
鱼宵41 分钟前
取集合第一个元素,Java 为什么要写三种写法?
java·windows·python·java21
卷无止境1 小时前
给AI装上一双眼睛:快速构建代码验证器的思路与落地方案
后端·python