共计 1401 个字符,预计需要花费 4 分钟才能阅读完成。
在前一节中我们学习了 SQLModel 的基本用法与数据库连接方式,今天我们将继续深入,演示如何通过 SQLModel 实现典型的增删改查(CRUD)操作。
一、准备工作:定义模型和数据库引擎
from sqlmodel import SQLModel, Field, create_engine
class User(SQLModel, table=True):
id: int = Field(default=None, primary_key=True)
name: str
age: int
sqlite_url = "sqlite:///./test.db"
engine = create_engine(sqlite_url, echo=False)
SQLModel.metadata.create_all(engine)
二、创建(Create)
from sqlmodel import Session
def create_user(name: str, age: int):
user = User(name=name, age=age)
with Session(engine) as session:
session.add(user)
session.commit()
session.refresh(user)
return user
三、读取(Read)
def get_user_by_id(user_id: int):
with Session(engine) as session:
user = session.get(User, user_id)
return user
def get_all_users():
with Session(engine) as session:
return session.query(User).all()
四、更新(Update)
def update_user(user_id: int, name: str = None, age: int = None):
with Session(engine) as session:
user = session.get(User, user_id)
if not user:
return None
if name:
user.name = name
if age:
user.age = age
session.add(user)
session.commit()
session.refresh(user)
return user
五、删除(Delete)
def delete_user(user_id: int):
with Session(engine) as session:
user = session.get(User, user_id)
if not user:
return False
session.delete(user)
session.commit()
return True
六、示例调用
# 创建用户
new_user = create_user("Tom", 30)
print(new_user)
# 获取所有用户
print(get_all_users())
# 更新用户信息
update_user(new_user.id, age=31)
# 删除用户
delete_user(new_user.id)
七、小结
使用 SQLModel 实现 CRUD 操作非常直观,得益于其对 SQLAlchemy 和 Pydantic 的封装,减少了大量样板代码。下节我们将介绍 SQLModel 中如何使用关系(Relationship)来处理一对多或多对多的数据结构。
正文完