销 | 量 | 过 | 万 |
---|---|---|---|
TEEIS德国护膝夏天用薄款 优惠券 | 冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜 | 巨奇严选 鞋子除臭剂360ml | 多芬身体磨砂膏280g |
健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券 | AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖 | 妙洁棉柔抹布10片装 厨房洗碗布家用神器 去油污强力吸水巾 | 宝宝馋了婴幼儿酸奶无添加白砂糖85g*10袋 儿童常温奶宝宝辅食饮品 |
素养生活 有机红花生400g 生花生米东北四粒红花生 凉拌 杂粮粗粮真空包装 | UG NX 12.0中文版从入门到精通ug nx建模曲面钣金装配工程图 有限元分析 机械设计 数控加工编程 autocad教程cad教材自学版完全自学宝典 | 乐品乐茶茶叶绿茶特级毛尖2025新茶明前春茶嫩芽散装自己喝京东自营 | 松鲜鲜松茸鲜调味料125g【0添加 松茸提鲜】代替盐鸡精味精煲汤炒菜调味 优惠券 |
本迪大号加厚洗脸盆2只装36cm洗脸盆洗菜盆洗脚盆学生塑料盆泡脚盆 | 公牛(BULL)开关插座 G12系列 十孔插座86型插座面板 G12Z423 白色 | 周十五益生菌蜂蜜露孕妇开塞蜜露待产包用产后哺乳期儿童蜂蜜栓礼品36支 | 小鹿蓝蓝婴幼儿肉蔬多维蝴蝶面600g含30小袋婴儿辅食果蔬营养面超值装 优惠券 |
SQLModel 是一个基于 Python 类型注解的库,用于简化与关系型数据库的交互。它由 FastAPI 的作者 Sebastian Ramirez 开发,结合了 SQLAlchemy(ORM)和 Pydantic(数据验证)的核心功能,提供类型安全、直观的 API。
核心特点
- 类型安全
利用 Python 类型注解(如str
,int
,Optional
),IDE 可提供自动补全和错误检查。 - 无缝集成
兼容 FastAPI(自动生成 OpenAPI 文档)、SQLAlchemy(底层操作)和 Pydantic(数据验证)。 - 简洁语法
减少样板代码,声明模型即可自动生成数据库表。 - 异步支持
支持AsyncSession
异步操作(需 SQLAlchemy 1.4+)。
安装
pip install sqlmodel
基础用法
1. 定义模型
from sqlmodel import SQLModel, Fieldclass Hero(SQLModel, table=True):id: int | None = Field(default=None, primary_key=True)name: strsecret_name: strage: int | None = None
table=True
:表示该类对应数据库表。Field
:定义字段约束(如primary_key=True
)。
2. 创建数据库与表
from sqlmodel import create_engineengine = create_engine("sqlite:///database.db")
SQLModel.metadata.create_all(engine) # 创建表
3. 增删改查操作
from sqlmodel import Session, select# 创建数据
hero = Hero(name="Spider-Man", secret_name="Peter Parker")# 插入数据
with Session(engine) as session:session.add(hero)session.commit()# 查询数据
with Session(engine) as session:statement = select(Hero).where(Hero.name == "Spider-Man")hero = session.exec(statement).first()print(hero.secret_name) # 输出: Peter Parker# 更新数据
hero.age = 25
with Session(engine) as session:session.add(hero)session.commit()# 删除数据
with Session(engine) as session:session.delete(hero)session.commit()
高级功能
-
关系(Relationships)
定义表间关系(如一对多):class Team(SQLModel, table=True):id: int | None = Field(default=None, primary_key=True)name: strheroes: list["Hero"] = Relationship(back_populates="team")class Hero(SQLModel, table=True):team_id: int | None = Field(foreign_key="team.id")team: Team | None = Relationship(back_populates="heroes")
-
异步支持
from sqlmodel.ext.asyncio.session import AsyncSessionasync with AsyncSession(engine) as session:result = await session.exec(select(Hero))heroes = result.all()
-
FastAPI 集成
直接在 FastAPI 中使用 SQLModel 作为请求/响应模型:from fastapi import FastAPI app = FastAPI()@app.post("/heroes/", response_model=Hero) def create_hero(hero: Hero):with Session(engine) as session:session.add(hero)session.commit()session.refresh(hero)return hero
优点 vs 缺点
优点 | 缺点 |
---|---|
✅ 类型安全 + IDE 友好 | ❌ 生态较新,社区资源较少 |
✅ 减少 SQLAlchemy 样板代码 | ❌ 复杂查询仍需 SQLAlchemy 语法 |
✅ 完美兼容 FastAPI 生态 | ❌ 不支持 NoSQL 数据库 |
✅ 自动数据验证(Pydantic) |
适用场景
- 需要类型安全 ORM 的 FastAPI 项目。
- 中小型关系型数据库应用(SQLite/PostgreSQL/MySQL)。
- 快速原型开发。
总结
SQLModel 通过融合 SQLAlchemy 和 Pydantic,提供了现代化、类型安全的数据库操作体验。适合追求开发效率、类型检查及 FastAPI 集成的项目。对于复杂场景,可结合原生 SQLAlchemy 使用。
Python 图书推荐
书名 | 出版社 | 推荐 |
---|---|---|
Python编程 从入门到实践 第3版(图灵出品) | 人民邮电出版社 | ★★★★★ |
Python数据科学手册(第2版)(图灵出品) | 人民邮电出版社 | ★★★★★ |
图形引擎开发入门:基于Python语言 | 电子工业出版社 | ★★★★★ |
科研论文配图绘制指南 基于Python(异步图书出品) | 人民邮电出版社 | ★★★★★ |
Effective Python:编写好Python的90个有效方法(第2版 英文版) | 人民邮电出版社 | ★★★★★ |
Python人工智能与机器学习(套装全5册) | 清华大学出版社 | ★★★★★ |
JAVA 图书推荐
书名 | 出版社 | 推荐 |
---|---|---|
Java核心技术 第12版:卷Ⅰ+卷Ⅱ | 机械工业出版社 | ★★★★★ |
Java核心技术 第11版 套装共2册 | 机械工业出版社 | ★★★★★ |
Java语言程序设计基础篇+进阶篇 原书第12版 套装共2册 | 机械工业出版社 | ★★★★★ |
Java 11官方参考手册(第11版) | 清华大学出版社 | ★★★★★ |
Offer来了:Java面试核心知识点精讲(第2版)(博文视点出品) | 电子工业出版社 | ★★★★★ |