使用SQLModel创建数据库和表模型教程

使用SQLModel创建数据库和表模型教程

sqlmodel SQL databases in Python, designed for simplicity, compatibility, and robustness. sqlmodel 项目地址: https://gitcode.com/gh_mirrors/sq/sqlmodel

SQLModel是一个强大的Python库,它结合了SQLAlchemy和Pydantic的优点,让数据库操作和模型验证变得简单直观。本文将详细介绍如何使用SQLModel创建数据库和表模型。

准备工作

在开始之前,请确保:

  1. 已创建Python虚拟环境并激活
  2. 已安装SQLModel库
  3. 准备好代码编辑器

创建表模型类

表模型类是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等工具验证:

  1. 检查database.db文件是否创建
  2. 确认hero表结构正确
  3. 验证各列类型是否符合预期

总结

通过本教程,我们学习了:

  1. 如何定义SQLModel表模型
  2. 字段类型和主键的设置方法
  3. 创建数据库引擎的最佳实践
  4. 组织代码结构的技巧

SQLModel的这种设计既保持了Python的简洁性,又提供了强大的数据库操作能力,是Python ORM领域的一个优秀选择。

sqlmodel SQL databases in Python, designed for simplicity, compatibility, and robustness. sqlmodel 项目地址: https://gitcode.com/gh_mirrors/sq/sqlmodel

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

章瑗笛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值