SQLModel:解放人類生產(chǎn)力的Python庫(kù)
小伙伴們!今天我們來(lái)聊聊 Python 中的一個(gè)強(qiáng)大庫(kù)——SQLModel。這貨不是普通的 ORM(對(duì)象關(guān)系映射)庫(kù),它是基于 Pydantic 的,這意味著你可以用 Python 類來(lái)定義你的數(shù)據(jù)庫(kù)模型,并且這些類會(huì)自動(dòng)映射到數(shù)據(jù)庫(kù)表。聽起來(lái)是不是很酷?那就讓我們開始吧!
SQLModel 是什么?
SQLModel 是一個(gè)現(xiàn)代的 ORM 庫(kù),它讓你可以用 Python 類來(lái)定義數(shù)據(jù)庫(kù)模型,并且自動(dòng)生成 SQL 代碼。它結(jié)合了 Pydantic 的類型檢查和 SQLAlchemy 的數(shù)據(jù)庫(kù)操作能力,讓你的代碼既簡(jiǎn)潔又安全。
為什么選擇 SQLModel?
- 類型安全:利用 Python 類型注解,減少運(yùn)行時(shí)錯(cuò)誤。
- 簡(jiǎn)潔性:用 Python 類定義模型,自動(dòng)生成 SQL 語(yǔ)句。
- 靈活性:支持多種數(shù)據(jù)庫(kù),易于集成和擴(kuò)展。
安裝 SQLModel
要開始使用 SQLModel,首先需要安裝它。打開你的終端,運(yùn)行以下命令:
pip install sqlmodel
定義模型
定義一個(gè)模型就像定義一個(gè) Python 類一樣簡(jiǎn)單。我們來(lái)定義一個(gè) User 模型,包含 id, username 和 email 字段。
from sqlmodel import SQLModel, Field, String, Integer
class User(SQLModel, table=True):
id: int = Field(default=None, primary_key=True)
username: String = Field(...)
email: String = Field(...)
這里,F(xiàn)ield 函數(shù)用于定義字段的額外屬性,比如是否為主鍵。
創(chuàng)建數(shù)據(jù)庫(kù)引擎
接下來(lái),我們需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù)引擎。SQLModel 支持多種數(shù)據(jù)庫(kù),這里我們以 SQLite 為例。
from sqlalchemy import create_engine
engine = create_engine("sqlite:///./test.db")
SQLModel.metadata.create_all(engine)
增刪查改操作
插入數(shù)據(jù)
我們來(lái)插入一個(gè)新用戶。
from sqlmodel import Session
def create_user(username: str, email: str):
session = Session(engine)
new_user = User(username=username, email=email)
session.add(new_user)
session.commit()
session.refresh(new_user)
return new_user
查詢數(shù)據(jù)
查詢操作也很直觀。
def get_users():
session = Session(engine)
users = session.query(User).all()
return users
def get_user_by_id(user_id: int):
session = Session(engine)
user = session.query(User).filter(User.id == user_id).first()
return user
更新數(shù)據(jù)
更新操作同樣簡(jiǎn)單。
def update_user_email(user_id: int, new_email: str):
session = Session(engine)
user = session.query(User).filter(User.id == user_id).first()
if user:
user.email = new_email
session.commit()
return user
return None
刪除數(shù)據(jù)
刪除操作也是必不可少的。
def delete_user(user_id: int):
session = Session(engine)
user = session.query(User).filter(User.id == user_id).first()
if user:
session.delete(user)
session.commit()
return True
return False
以上就是 SQLModel 的基本介紹和一些增刪查改操作的示例。希望這能幫助你更好地理解和使用 SQLModel。如果你想要更深入地了解 SQLModel,記得查看它的官方文檔和 GitHub 倉(cāng)庫(kù)哦!