Python ORM 框架 SQLModel 快速入门教程

创建模型

python 复制代码
import sqlmodel
import typing


class Hero(sqlmodel.SQLModel, table=True):
    id: typing.Optional[int] = sqlmodel.Field(default=None, primary_key=True)
    name: str
    real_name: str
    age: typing.Optional[int] = None

创建表

python 复制代码
import sqlmodel
import typing



class Hero(sqlmodel.SQLModel, table=True):
    id: typing.Optional[int] = sqlmodel.Field(default=None, primary_key=True)
    name: str
    real_name: str
    age: typing.Optional[int] = None

db_url = "mysql+pymysql://root:zhangdapeng520@127.0.0.1:3306/fastzdp_sqlmodel?charset=utf8mb4"
engine = sqlmodel.create_engine(db_url, echo=True)

sqlmodel.SQLModel.metadata.drop_all(engine)
sqlmodel.SQLModel.metadata.create_all(engine)

添加单条数据

python 复制代码
from tkinter.font import names

import sqlmodel
import typing


class Hero(sqlmodel.SQLModel, table=True):
    id: typing.Optional[int] = sqlmodel.Field(default=None, primary_key=True)
    name: str
    real_name: str
    age: typing.Optional[int] = None


db_url = "mysql+pymysql://root:zhangdapeng520@127.0.0.1:3306/fastzdp_sqlmodel?charset=utf8mb4"
engine = sqlmodel.create_engine(db_url, echo=True)

sqlmodel.SQLModel.metadata.drop_all(engine)
sqlmodel.SQLModel.metadata.create_all(engine)

# add
with sqlmodel.Session(engine) as session:
    zs = Hero(name="张三", real_name="张三", age=33)
    session.add(zs)
    session.commit()

添加多条数据

python 复制代码
from tkinter.font import names

import sqlmodel
import typing


class Hero(sqlmodel.SQLModel, table=True):
    id: typing.Optional[int] = sqlmodel.Field(default=None, primary_key=True)
    name: str
    real_name: str
    age: typing.Optional[int] = None


db_url = "mysql+pymysql://root:zhangdapeng520@127.0.0.1:3306/fastzdp_sqlmodel?charset=utf8mb4"
engine = sqlmodel.create_engine(db_url, echo=True)

sqlmodel.SQLModel.metadata.drop_all(engine)
sqlmodel.SQLModel.metadata.create_all(engine)

# add
with sqlmodel.Session(engine) as session:
    zs1 = Hero(name="张三1", real_name="张三", age=33)
    session.add(zs1)
    zs2 = Hero(name="张三2", real_name="张三", age=33)
    session.add(zs2)
    zs3 = Hero(name="张三3", real_name="张三", age=33)
    session.add(zs3)

    session.commit()

根据名称查询数据

python 复制代码
from tkinter.font import names

import sqlmodel
import typing


class Hero(sqlmodel.SQLModel, table=True):
    id: typing.Optional[int] = sqlmodel.Field(default=None, primary_key=True)
    name: str
    real_name: str
    age: typing.Optional[int] = None


db_url = "mysql+pymysql://root:zhangdapeng520@127.0.0.1:3306/fastzdp_sqlmodel?charset=utf8mb4"
engine = sqlmodel.create_engine(db_url, echo=True)

sqlmodel.SQLModel.metadata.drop_all(engine)
sqlmodel.SQLModel.metadata.create_all(engine)

# add
with sqlmodel.Session(engine) as session:
    zs1 = Hero(name="张三1", real_name="张三", age=33)
    session.add(zs1)
    zs2 = Hero(name="张三2", real_name="张三", age=33)
    session.add(zs2)
    zs3 = Hero(name="张三3", real_name="张三", age=33)
    session.add(zs3)

    # 查找
    query = sqlmodel.select(Hero).where(Hero.name=="张三1")
    hero = session.exec(query).first()
    print(hero)

    session.commit()

查找所有数据

python 复制代码
from tkinter.font import names

import sqlmodel
import typing


class Hero(sqlmodel.SQLModel, table=True):
    id: typing.Optional[int] = sqlmodel.Field(default=None, primary_key=True)
    name: str
    real_name: str
    age: typing.Optional[int] = None


db_url = "mysql+pymysql://root:zhangdapeng520@127.0.0.1:3306/fastzdp_sqlmodel?charset=utf8mb4"
engine = sqlmodel.create_engine(db_url, echo=True)

sqlmodel.SQLModel.metadata.drop_all(engine)
sqlmodel.SQLModel.metadata.create_all(engine)

# add
with sqlmodel.Session(engine) as session:
    zs1 = Hero(name="张三1", real_name="张三", age=33)
    session.add(zs1)
    zs2 = Hero(name="张三2", real_name="张三", age=33)
    session.add(zs2)
    zs3 = Hero(name="张三3", real_name="张三", age=33)
    session.add(zs3)

    # 查找
    query = sqlmodel.select(Hero)
    heros = session.exec(query)
    print(list(heros))

    session.commit()

and 查询

python 复制代码
from tkinter.font import names

import sqlmodel
import typing


class Hero(sqlmodel.SQLModel, table=True):
    id: typing.Optional[int] = sqlmodel.Field(default=None, primary_key=True)
    name: str
    real_name: str
    age: typing.Optional[int] = None


db_url = "mysql+pymysql://root:zhangdapeng520@127.0.0.1:3306/fastzdp_sqlmodel?charset=utf8mb4"
engine = sqlmodel.create_engine(db_url, echo=True)

sqlmodel.SQLModel.metadata.drop_all(engine)
sqlmodel.SQLModel.metadata.create_all(engine)

# add
with sqlmodel.Session(engine) as session:
    zs1 = Hero(name="张三1", real_name="张三", age=33)
    session.add(zs1)
    zs2 = Hero(name="张三2", real_name="张三", age=33)
    session.add(zs2)
    zs3 = Hero(name="张三3", real_name="张三", age=33)
    session.add(zs3)

    # 查找
    query = sqlmodel.select(Hero).where(Hero.real_name=="张三", Hero.name=="张三3")
    hero = session.exec(query).first()
    print(hero)

    session.commit()

or 查询

python 复制代码
import sqlmodel
import typing

class Hero(sqlmodel.SQLModel, table=True):
    id: typing.Optional[int] = sqlmodel.Field(default=None, primary_key=True)
    name: str
    real_name: str
    age: typing.Optional[int] = None


db_url = "mysql+pymysql://root:zhangdapeng520@127.0.0.1:3306/fastzdp_sqlmodel?charset=utf8mb4"
engine = sqlmodel.create_engine(db_url, echo=True)

sqlmodel.SQLModel.metadata.drop_all(engine)
sqlmodel.SQLModel.metadata.create_all(engine)

# add
with sqlmodel.Session(engine) as session:
    zs1 = Hero(name="张三1", real_name="张三", age=33)
    session.add(zs1)
    zs2 = Hero(name="张三2", real_name="张三", age=33)
    session.add(zs2)
    zs3 = Hero(name="张三3", real_name="张三", age=33)
    session.add(zs3)

    # 查找
    query = sqlmodel.select(Hero).where(sqlmodel.or_(
        Hero.name == "张三1",
        Hero.name == "张三2",
    ))
    heros = session.exec(query)
    print(list(heros))

    session.commit()

根据 ID 查询

python 复制代码
import sqlmodel
import typing

class Hero(sqlmodel.SQLModel, table=True):
    id: typing.Optional[int] = sqlmodel.Field(default=None, primary_key=True)
    name: str
    real_name: str
    age: typing.Optional[int] = None


db_url = "mysql+pymysql://root:zhangdapeng520@127.0.0.1:3306/fastzdp_sqlmodel?charset=utf8mb4"
engine = sqlmodel.create_engine(db_url, echo=True)

sqlmodel.SQLModel.metadata.drop_all(engine)
sqlmodel.SQLModel.metadata.create_all(engine)

# add
with sqlmodel.Session(engine) as session:
    zs1 = Hero(name="张三1", real_name="张三", age=33)
    session.add(zs1)
    zs2 = Hero(name="张三2", real_name="张三", age=33)
    session.add(zs2)
    zs3 = Hero(name="张三3", real_name="张三", age=33)
    session.add(zs3)

    # 查找
    hero  =session.get(Hero, 1)
    print(hero)

    session.commit()

分页查询

python 复制代码
import sqlmodel
import typing

class Hero(sqlmodel.SQLModel, table=True):
    id: typing.Optional[int] = sqlmodel.Field(default=None, primary_key=True)
    name: str
    real_name: str
    age: typing.Optional[int] = None


db_url = "mysql+pymysql://root:zhangdapeng520@127.0.0.1:3306/fastzdp_sqlmodel?charset=utf8mb4"
engine = sqlmodel.create_engine(db_url, echo=True)

sqlmodel.SQLModel.metadata.drop_all(engine)
sqlmodel.SQLModel.metadata.create_all(engine)

# add
with sqlmodel.Session(engine) as session:
    zs1 = Hero(name="张三1", real_name="张三", age=33)
    session.add(zs1)
    zs2 = Hero(name="张三2", real_name="张三", age=33)
    session.add(zs2)
    zs3 = Hero(name="张三3", real_name="张三", age=33)
    session.add(zs3)

    # 查找
    query = sqlmodel.select(Hero).offset(0).limit(2)
    heros = session.exec(query)
    print(list(heros))

    session.commit()

修改数据

python 复制代码
import sqlmodel
import typing


class Hero(sqlmodel.SQLModel, table=True):
    id: typing.Optional[int] = sqlmodel.Field(default=None, primary_key=True)
    name: str
    real_name: str
    age: typing.Optional[int] = None


db_url = "mysql+pymysql://root:zhangdapeng520@127.0.0.1:3306/fastzdp_sqlmodel?charset=utf8mb4"
engine = sqlmodel.create_engine(db_url, echo=True)

sqlmodel.SQLModel.metadata.drop_all(engine)
sqlmodel.SQLModel.metadata.create_all(engine)

# add
with sqlmodel.Session(engine) as session:
    zs1 = Hero(name="张三1", real_name="张三", age=33)
    session.add(zs1)
    zs2 = Hero(name="张三2", real_name="张三", age=33)
    session.add(zs2)
    zs3 = Hero(name="张三3", real_name="张三", age=33)
    session.add(zs3)

    # 修改
    hero = session.get(Hero, 1)
    hero.name = "李四"
    session.commit()

with sqlmodel.Session(engine) as session:
    # 修改
    hero = session.get(Hero, 1)
    hero.name = "李四"
    session.commit()
    session.refresh(hero)

删除数据

python 复制代码
import sqlmodel
import typing



class Hero(sqlmodel.SQLModel, table=True):
    id: typing.Optional[int] = sqlmodel.Field(default=None, primary_key=True)
    name: str
    real_name: str
    age: typing.Optional[int] = None


db_url = "mysql+pymysql://root:zhangdapeng520@127.0.0.1:3306/fastzdp_sqlmodel?charset=utf8mb4"
engine = sqlmodel.create_engine(db_url, echo=True)

sqlmodel.SQLModel.metadata.drop_all(engine)
sqlmodel.SQLModel.metadata.create_all(engine)

# add
with sqlmodel.Session(engine) as session:
    zs1 = Hero(name="张三1", real_name="张三", age=33)
    session.add(zs1)
    zs2 = Hero(name="张三2", real_name="张三", age=33)
    session.add(zs2)
    zs3 = Hero(name="张三3", real_name="张三", age=33)
    session.add(zs3)

    # 修改
    hero = session.get(Hero, 1)
    hero.name = "李四"
    session.commit()

with sqlmodel.Session(engine) as session:
    # 删除
    hero = session.get(Hero, 1)
    session.delete(hero)
    session.commit()
相关推荐
ShallWeL7 分钟前
【机器学习】(16)—— 数值数据
人工智能·python·算法·机器学习·数据分析
gr95ZS6E614 分钟前
基础入门java安全(一)--CC1基础分析
开发语言·python
极度的坦诚就是无坚不摧17 分钟前
数据分析DAY1-Python基础
python·数据分析
智码看视界22 分钟前
Day19 Spring Boot启动优化:启动时间从8秒降到2秒
java·spring boot·后端·启动优化
hongyucai32 分钟前
详解rlinf强化学习四步曲
人工智能·python·算法·架构
c_lb728832 分钟前
2026年下半年AI量化工具,阶段不同重点也不同
人工智能·python
北京阿法龙科技有限公司41 分钟前
AR智能眼镜安防应用核心指标:识别距离筑牢防线
java·开发语言·ar
殘殤血1 小时前
Tomcat的事件监听机制:观察者模式 _
java·观察者模式·tomcat
汤姆yu1 小时前
面向具身智能的物理视频模拟器:蚂蚁灵波LingBot-Video开源模型全解析
java·大数据·人工智能·gpt·开源·大模型·音视频
Xpower 171 小时前
详细解释 Codex 最近一次功能更新,以及 GPT-5.6 Sol、Terra、Luna 的能力、价格、使用方式和适用场景。
人工智能·python·gpt·学习