使用SQLModel创建数据库和表模型教程
SQLModel是一个强大的Python库,它结合了SQLAlchemy和Pydantic的优点,让数据库操作和模型验证变得简单直观。本文将详细介绍如何使用SQLModel创建数据库和表模型。
准备工作
在开始之前,请确保:
- 已创建Python虚拟环境并激活
- 已安装SQLModel库
- 准备好代码编辑器
创建表模型类
表模型类是SQLModel的核心概念,它既定义了数据库表结构,又提供了数据验证功能。
from sqlmodel import SQLModel, Field
class Hero(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
name: str
secret_name: str
age: int | None = None
关键点说明:
table=True
表示这是一个表模型,对应数据库中的表- 每个实例代表表中的一行数据
- 类属性对应表中的列
字段类型详解
可为空字段
使用类型 | None
语法表示字段可为空:
age: int | None = None
这表示:
- 数据库列允许NULL值
- 默认值为None
- 不是必填字段
主键字段
主键字段需要特殊标记:
id: int | None = Field(default=None, primary_key=True)
特点:
primary_key=True
标记为主键- 数据库自动生成值,代码中可为None
- 必须设置default=None
创建数据库引擎
引擎是SQLModel与数据库通信的桥梁:
from sqlmodel import create_engine
sqlite_url = "sqlite:///database.db"
engine = create_engine(sqlite_url, echo=True)
引擎配置说明:
sqlite:///
前缀表示SQLite数据库echo=True
会打印执行的SQL语句,方便调试- 生产环境应移除echo参数
创建数据库和表
使用metadata创建数据库和表:
SQLModel.metadata.create_all(engine)
关键点:
- 必须在所有模型类定义后调用
- 会创建数据库文件(如不存在)和所有表
- 对于生产环境,应考虑使用迁移工具
代码组织最佳实践
推荐将代码组织如下:
def create_db_and_tables():
SQLModel.metadata.create_all(engine)
if __name__ == "__main__":
create_db_and_tables()
这种结构:
- 避免导入时自动执行
- 可通过
python app.py
显式调用 - 便于其他模块导入模型类
数据类型说明
SQLModel会自动处理不同数据库的类型差异:
- SQLite使用TEXT类型
- PostgreSQL/MySQL使用VARCHAR
- 默认VARCHAR(255)兼容MySQL
验证结果
运行程序后,可以使用DB Browser等工具验证:
- 检查database.db文件是否创建
- 确认hero表结构正确
- 验证各列类型是否符合预期
总结
通过本教程,我们学习了:
- 如何定义SQLModel表模型
- 字段类型和主键的设置方法
- 创建数据库引擎的最佳实践
- 组织代码结构的技巧
SQLModel的这种设计既保持了Python的简洁性,又提供了强大的数据库操作能力,是Python ORM领域的一个优秀选择。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考