銷 | 量 | 過 | 萬 |
---|---|---|---|
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版)(博文視點出品) | 電子工業出版社 | ★★★★★ |