查询
from sqlmodel import Field, Session, SQLModel, create_engine, select
session = Session(bind=engine)
根据ID查询
获取一条数据
session.get(SQLModel类, 1)
查询全部数据
# 返回可迭代对象, with 结束后不会占用资源
with Session(engine) as session:
statement = select(SQLModel类)
# 执行
# 获取到一个可迭代到对象
results = session.exec(statement)
筛选
# 返回可迭代对象
statement = select(SQLModel类).where(SQLModel类.属性 == '值')
results = session.exec(statement)
筛选方式
代码
.where(SQLModel类.属性 == '值')
.where(SQLModel类.属性 == '值', SQLModel类.属性 == '值')
.where(SQLModel类.属性 == '值').where(SQLModel类.属性 == '值')
or
满足两个条件的都会返回
代码
.where(or_(SQLModel类.属性 == '值', SQLModel类.属性 == '值'))
处理特殊类型
可以处理特殊类型 不使用此方式会错误提示但不影响使用
代码
.where(col(SQLModel类.属性) == '值')
返回数量与位置限制
代码
.limit(3)
返回前3条数据
.offset(3)
偏移量 返回3条后的全部数据
运算符
代码
==
!=
<
>
>=
<=
返回
返回列表
将可迭代对象返回成一个列表
heroes = results.all()
将可迭代对象返回一条数据
heroes = results.first()
返回一条数据, 如果不是将报错
heroes = results.one()
多对多查询
返回可迭代对象
statement = select(外键SQLModel类, 主键SQLModel类).where(外键SQLModel类.外键ID == 主键SQLModel类.主键ID)
results = session.exec(statement)
只要外键SQLModel类数据 但 主键SQLModel类 参与筛选
statement = select(外键SQLModel类).where(外键SQLModel类.外键ID == 主键SQLModel类.主键ID)
自动链接
statement = select(外键SQLModel类, 主键SQLModel类).join(主键SQLModel类)
results = session.exec(statement)
join() 参数
isouter=False # 是否 显示没有连接的数据
筛选包含列表值的全部数据
from sqlmodel import Session, select, col
statement = select(模型).where(col(模型.字段).in_([值1, ...]))
website = session.exec(statement).first()