SQLModel 入门教程:创建模型与数据库操作
SQLModel 是一个强大的 Python 库,它结合了 SQLAlchemy 和 Pydantic 的优点,让数据库操作变得简单而直观。本文将带你了解如何使用 SQLModel 创建数据模型并进行基本的数据库操作。
模型定义
在 SQLModel 中,我们通过定义 Python 类来创建数据模型。每个类属性对应数据库表中的一个字段:
class Hero(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
name: str = Field(index=True)
secret_name: str
age: int | None = Field(default=None, index=True)
这个 Hero
模型具有以下特点:
- 继承自
SQLModel
并设置table=True
表示这是一个数据库表模型 id
字段是主键,类型为可选整数name
字段是必填字符串,并创建了数据库索引secret_name
是必填字符串age
是可选整数,也创建了索引
数据库连接
SQLModel 使用 SQLAlchemy 的引擎系统来连接数据库:
sqlite_file_name = "database.db"
sqlite_url = f"sqlite:///{sqlite_file_name}"
engine = create_engine(sqlite_url, echo=True)
这里我们创建了一个 SQLite 数据库连接,echo=True
会在控制台输出执行的 SQL 语句,便于调试。
创建数据库表
使用 SQLModel.metadata.create_all()
方法可以创建所有定义的表:
def create_db_and_tables():
SQLModel.metadata.create_all(engine)
数据操作
插入数据
创建英雄记录非常简单,只需实例化 Hero
类然后添加到会话中:
def create_heroes():
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
# 其他英雄实例...
with Session(engine) as session:
session.add(hero_1)
# 添加其他英雄...
session.commit()
查询数据
SQLModel 提供了直观的查询语法:
def select_heroes():
with Session(engine) as session:
statement = select(Hero).where(Hero.age <= 35)
results = session.exec(statement)
hero = results.first()
print("Hero:", hero)
这个查询会找出年龄小于等于 35 岁的第一个英雄。
主程序流程
def main():
create_db_and_tables() # 创建数据库和表
create_heroes() # 插入示例数据
select_heroes() # 执行查询
if __name__ == "__main__":
main()
总结
通过这个简单的例子,我们学习了 SQLModel 的几个核心功能:
- 使用 Python 类定义数据库模型
- 连接数据库并创建表结构
- 插入新记录
- 执行基本查询
SQLModel 的强大之处在于它将 Python 类型提示与数据库操作完美结合,提供了类型安全的数据库访问方式。后续教程会深入探讨更复杂的功能,如关系、高级查询等。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考