SQLModel 教程:模型定义与基础CRUD操作详解
概述
SQLModel 是一个强大的 Python ORM 工具,它结合了 SQLAlchemy 和 Pydantic 的优势,让数据库操作变得简单直观。本文将深入解析如何使用 SQLModel 进行模型定义和基础 CRUD(创建、读取、更新、删除)操作。
模型定义
在 SQLModel 中,模型类需要继承 SQLModel
并设置 table=True
参数:
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str = Field(index=True)
secret_name: str
age: Optional[int] = Field(default=None, index=True)
字段类型解析
- 主键字段:使用
Field(primary_key=True)
标记,通常设置为Optional[int]
类型 - 索引字段:通过
Field(index=True)
创建索引提升查询性能 - 必填字段:直接声明为
str
等非可选类型 - 可选字段:使用
Optional[...]
类型并设置默认值
数据库连接配置
SQLModel 使用 SQLAlchemy 的引擎系统连接数据库:
sqlite_file_name = "database.db"
sqlite_url = f"sqlite:///{sqlite_file_name}"
engine = create_engine(sqlite_url, echo=True)
echo=True
参数会在控制台输出执行的 SQL 语句,非常适合调试阶段使用。
数据库表创建
通过 SQLModel.metadata.create_all()
方法创建所有定义的表:
def create_db_and_tables():
SQLModel.metadata.create_all(engine)
数据创建(Create)
创建数据记录的基本流程:
- 实例化模型类
- 添加到会话
- 提交会话
def create_heroes():
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
# ...其他实例
with Session(engine) as session:
session.add(hero_1)
# ...添加其他实例
session.commit()
数据查询(Read)
SQLModel 提供了直观的查询接口:
def select_heroes():
with Session(engine) as session:
statement = select(Hero).where(Hero.id == 1)
results = session.exec(statement)
hero = results.first()
print("Hero:", hero)
select()
函数构建查询语句,where()
添加过滤条件,exec()
执行查询,first()
获取第一条结果。
执行流程
典型的 SQLModel 应用执行流程:
def main():
create_db_and_tables() # 1. 创建数据库和表
create_heroes() # 2. 插入初始数据
select_heroes() # 3. 查询数据
最佳实践
- 会话管理:始终使用上下文管理器 (
with
语句) 管理会话 - 批量操作:多个添加操作可以在一次
commit()
中完成 - 类型提示:充分利用 Python 的类型提示功能
- 索引优化:为常用查询字段添加索引
总结
通过这个示例,我们学习了 SQLModel 的基础用法,包括:
- 模型定义与字段配置
- 数据库连接设置
- 表结构创建
- 数据插入操作
- 基本查询操作
SQLModel 的简洁语法让数据库操作变得更加 Pythonic,同时保持了强大的功能。后续可以进一步学习复杂查询、关系模型等高级特性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考