SQLModel 教程:创建数据库和表的基本操作
理解 SQLModel 的核心概念
SQLModel 是一个强大的 Python 库,它结合了 SQLAlchemy 和 Pydantic 的优势,为开发者提供了类型安全且直观的数据库操作方式。本教程将重点介绍如何使用 SQLModel 创建数据库和定义数据表。
模型定义:Hero 类解析
在示例代码中,我们定义了一个 Hero
类,它继承自 SQLModel
并设置了 table=True
参数。这个类将成为我们数据库中的表结构:
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
secret_name: str
age: Optional[int] = None
这个模型定义了四个字段:
id
: 主键字段,类型为可选整数,当插入新记录时如果不指定会自动生成name
: 必填字符串字段,存储英雄的公开名称secret_name
: 必填字符串字段,存储英雄的秘密身份age
: 可选整数字段,存储英雄的年龄
数据库连接配置
代码中配置了 SQLite 数据库连接:
sqlite_file_name = "database.db"
sqlite_url = f"sqlite:///{sqlite_file_name}"
engine = create_engine(sqlite_url, echo=True)
这里有几个关键点:
- 使用 SQLite 作为数据库后端,数据将存储在
database.db
文件中 echo=True
参数会输出所有执行的 SQL 语句,非常适合开发和调试阶段create_engine
创建了一个数据库引擎实例,它是与数据库交互的核心接口
创建数据库和表
实际创建数据库和表的逻辑封装在 create_db_and_tables
函数中:
def create_db_and_tables():
SQLModel.metadata.create_all(engine)
这个函数调用了 SQLModel.metadata.create_all()
方法,它会:
- 检查所有继承自
SQLModel
且设置了table=True
的模型类 - 根据这些模型的定义生成对应的数据库表
- 如果表已存在,不会重复创建(不会覆盖现有数据)
执行脚本
最后的条件判断确保脚本可以直接运行:
if __name__ == "__main__":
create_db_and_tables()
当直接运行这个 Python 文件时(而不是作为模块导入),它会执行 create_db_and_tables()
函数,完成数据库和表的创建。
实际应用中的注意事项
-
生产环境配置:开发环境中使用 SQLite 很方便,但在生产环境中可能需要更强大的数据库如 PostgreSQL 或 MySQL
-
模型变更管理:当模型字段发生变化时,需要考虑数据库迁移策略,可以使用专门的迁移工具如 Alembic
-
性能考虑:
echo=True
在生产环境中应该关闭,以避免不必要的日志输出 -
连接池配置:对于高并发应用,可能需要配置引擎的连接池参数
通过这个简单的示例,我们可以看到 SQLModel 如何简化数据库操作,让开发者能够用 Python 类的方式定义数据模型,同时保持类型安全和数据库操作的灵活性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考