SQLModel:一个通过 Python 对象从 Python 代码与 SQL 数据库交互的库。

SQLModel:使用Python轻松操作SQL数据库
大家平时要是用Python写SQL数据库的代码,是不是总觉得有点繁琐?尤其是模型要写两份:一个给Pydantic用,一个给SQLAlchemy用,写着写着就想说“能不能合二为一啊”。结果嘛,SQLModel就真来了,它就是那种用起来会让人直呼“就该这样写”的库。
这个库挺有意思的,它的作者正是FastAPI的作者,目的也很明确:让你能用最少的代码,写出能同时满足Pydantic数据验证和SQLAlchemy ORM功能的模型。就这一点,真的能省下我一大堆时间。
先说说SQLModel到底是个啥
SQLModel本质上是一个Python库,它的底层是用两个大佬级别的库打底的:一个是SQLAlchemy,负责和数据库打交道;另一个是Pydantic,负责做数据校验和类型定义。这两者原本就各有各的强项,但要是分开写模型吧,重复多、代码长,还容易出错。而SQLModel就把它们整合到一起了,用一个模型类就搞定所有事,真的特别爽。
而且它完全基于Python类型注释,这就意味着你在写代码的时候,编辑器会疯狂提示你,基本上你想写错都难。写起来就像在和代码聊天一样,顺着写就完事了。
用起来到底有多轻松?听我举几个点
1. 写起来不费劲
你只需要写一个类,加上几个字段和类型注释,SQLModel自动帮你搞定数据库映射和Pydantic的验证逻辑。比如:
python
from sqlmodel import SQLModel, Field
class User(SQLModel, table=True):
id: int = Field(default=None, primary_key=True)
name: str
email: str
你看看,就这几行,数据库表结构、主键、数据验证、类型提示全都有了。而且因为用了Python的类型注解,像VS Code这种编辑器简直就是如虎添翼,自动补全、跳转全给安排上了。
2. 跟FastAPI搭配无敌好用
FastAPI用的就是Pydantic来处理请求数据的,那你想想,要是模型和数据库用的类跟FastAPI用的Pydantic模型是同一个,是不是省了一堆重复的代码?没错,SQLModel就是为这个场景准备的,完全兼容。
你可以直接拿数据库模型当作请求体、响应体来用,写接口的时候就轻松不少。
3. 默认值合理,少配点事多
SQLModel为很多操作都设置了合理的默认值,不用你每次都手动去设置数据库表名、字段类型、是否是主键、是否为空这些。有时候就觉得它像个懂事的小助手,很多麻烦事都自动帮你干完了。
4. 兼容性强、扩展性也没落下
说到底它还是基于SQLAlchemy和Pydantic做的,也就是说你要是遇到特别复杂的需求,它也不会卡你,还是可以用SQLAlchemy那一套写更底层的东西,也能照样用Pydantic搞复杂的数据验证。
总之,它不会限制你,但平时用也不会逼你写很多东西。这种感觉就像是,有事你说,我来搞,没事你就写得简单点就行。
实际使用的时候,我的感受是——省心!
我拿它做了个小项目,写接口的时候都直接用SQLModel的模型类,前后数据来回传都不需要额外转换格式。插入数据、查询、更新也特别直观,用惯了SQLAlchemy的人会发现它的API一模一样,完全不需要重新学习什么。
而且像我这种记性不太好的,有时候记不住字段名或模型结构,编辑器自动补全就显得特别重要。SQLModel在这方面做得真的不错。
最后嘛
我个人感觉,SQLModel就是一个真正站在开发者角度出发设计出来的库,它不仅把Pydantic和SQLAlchemy整合得非常好,还在开发体验上做了大量优化,写起来很顺手,也很少踩坑。如果你本来就在用FastAPI,那SQLModel简直是绝配,不用犹豫就能上手。
所以啊,想少写点重复代码,又想数据库模型和数据验证都安排得明明白白,那SQLModel你真的该试试!你要是用惯了Pydantic和SQLAlchemy,转到SQLModel的那一刻大概率就回不去了。