1.安装核心步骤
graph TD
A[创建项目目录] --> B[创建虚拟环境]
B --> C[激活虚拟环境]
C --> D[安装SQLModel]
D --> E[验证安装]
- 支持Python 3.7+环境
- 自动安装依赖项(SQLAlchemy和Pydantic)
2.完整安装命令
1 2 3 4 5 6 7 8
| $ python -m venv sqlmodel-env $ source sqlmodel-env/bin/activate
(sqlmodel-env) $ pip install sqlmodel ---> 100% Successfully installed sqlmodel pydantic sqlalchemy
|
- 推荐使用虚拟环境隔离项目依赖
- Windows系统激活命令:
.\sqlmodel-env\Scripts\activate.bat
3.数据库工具推荐
1 2 3 4 5
| from sqlmodel import SQLModel, create_engine
engine = create_engine("sqlite:///database.db") SQLModel.metadata.create_all(engine)
|
- 支持多种数据库引擎:SQLite/MySQL/PostgreSQL
create_engine 参数说明:
echo=True 开启SQL语句日志
- 不同数据库连接格式:
1 2 3 4
| "mysql+pymysql://user:pass@localhost/db"
"postgresql://user:pass@localhost/db"
|
4.安装验证方法
1 2
| import sqlmodel print(sqlmodel.__version__)
|
- 检查已安装的依赖:
1
| $ pip list | grep -E 'sqlmodel|sqlalchemy|pydantic'
|
- 创建测试表验证数据库连接
5.模型定义规范
1 2 3 4 5 6 7 8 9 10
| from sqlmodel import Field, SQLModel
class Hero(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) name: str = Field(max_length=32) secret_name: str age: int | None = Field(ge=0, le=200) create_time: int = Field( default_factory=lambda: time.time_ns() // 1000000 )
|
- 双继承机制:同时继承自SQLModel和设置
table=True
- 字段配置技巧:
- 使用
sa_type指定数据库类型(如BigInteger)
sa_column_kwargs添加列级注释
- 支持JSON格式字段自动转换
6.CRUD操作流程
graph TD
A[创建引擎] --> B[定义模型]
B --> C[创建表结构]
C --> D[创建Session]
D --> E[数据操作]
E --> F[提交事务]
6.1 数据写入
1 2 3 4 5 6 7
| from sqlmodel import Session
hero = Hero(name="Spider-Boy", secret_name="Peter Parker") with Session(engine) as session: session.add(hero) session.commit() session.refresh(hero)
|
- 批量插入支持
session.add_all([obj1, obj2])
6.2 数据查询
1 2 3 4
| from sqlmodel import select
stmt = select(Hero).where(Hero.age > 18) results = session.exec(stmt).all()
|
- 支持链式查询:
1 2 3 4 5 6
| session.exec( select(Hero) .where(Hero.name == "Spider-Boy") .offset(0) .limit(10) )
|
7.关系型数据处理
1 2 3 4 5 6 7
| class Team(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) heroes: list[Hero] = Relationship(link_model=HeroTeamLink)
class HeroTeamLink(SQLModel, table=True): hero_id: int = Field(foreign_key="hero.id", primary_key=True) team_id: int = Field(foreign_key="team.id", primary_key=True)
|
- 多对多关系实现要点:
- 创建关联表模型
- 使用
Relationship建立双向关联
- 插入时自动维护关联表
8.调试与优化
- 启用
echo=True查看生成SQL
- 事务管理:
1 2 3
| with session.begin(): session.add(obj)
|
- 性能提示:
- 预加载关系数据
select(Hero).options(joinedload(Hero.teams))
- 批量操作时关闭自动刷新