首页 > Python资料 博客日记
python SQLAlchemy ORM——从零开始学习 04 如何过滤(筛选)数据库中的数据
2025-01-11 00:00:04Python资料围观6次
Python资料网推荐python SQLAlchemy ORM——从零开始学习 04 如何过滤(筛选)数据库中的数据这篇文章给大家,欢迎收藏Python资料网享受知识的乐趣
04 如何过滤(筛选)数据库中的数据
从数据库中获筛选数据主要应用以下几个接口:filter
、filter_by
、以及 where
。前两个在 02已经展开说过,先展开说where
接口
前情提要:依赖03提及的model
【本质上就是数据库的链接,有可忽视】
当前的数据库表内容如下,仅作例子,不相同根据自身数据库操作即可:
4-1 通过where进行筛选
-
同时筛选多个(或者一个):
results = session.query(User).where(User.age > 23, User.name == "arthur").all()
where
接口用法与filter
类型,同样可以接收多个判定条件作为筛选,同理也可以接收单个判定条件,只需要逗号隔开即可
-
使用逻辑运算筛选数据
-
或运算
可以使用
sqlalchemy.or_
接口或在where
中使用按位或 ”|“ 运算符results = session.query(User).where( (User.age > 30) | (User.name == "caster") ).all() #两种或的结果是一致的,根据需要选择即可 # results = session.query(User).where( # sqlalchemy.or_( # User.age > 30, User.name == 'caster', # ) # ).all()
PS:为什么在where中,使用python的按位或运算符 能够和使用ORM库的逻辑或输出结果一样呢?他们按位或与逻辑或原理上是不一致的?
answer:因为在
SQLAlchemy
中,sqlalchemy.or_()
与|
是等价的,因为SQLAlchemy
会自动转换成sqlalchemy.or_()
;同理后面的逻辑运算符,因此,这两种写法的效果和结果是一致的,都是构建 SQL 查询中的OR
逻辑。 -
与运算
使用的接口换成了
sqlalchemy.and_
,以及&
def query_and(): # results = session.query(User).where(sqlalchemy.and_( # User.age >= 25, User.name == "caster") # ) results = session.query(User).where(( User.age >= 25) & (User.name == "caster") ) for result in results: print(result)
但好像筛选都是默认就是全为真。
-
非运算
def query_by_not(): results = session.query(User).where( sqlalchemy.not_(User.name == 'caster') ) for result in results: print(result)
就是换了个接口,换成
not_
了,但需要注意,not_
只能接受一个参数,如果多个参数:def query_by_not():#错误示范 results = session.query(User).where( sqlalchemy.not_(User.name == 'caster', User.age == 21)#参数不能多与1个 ) for result in results: print(result)
否则输出的结果就是这样了:
-
4-2 综合使用where进行筛选
经过上述的知识,已经能掌握逻辑运算筛选了,出个题,读者可以自行尝试,能够达到自己预期的效果则过关了。
-
题目:筛选名字不为xxx[name1]或 年龄大于xx[age1] 小于xx[age2] [age2>age1]
这里以名字不为
arthur
,或年龄大于22,小于30 -
code:
def answer(): results = session.query(User).where( or_( not_(User.name=='arthur'), ( and_(User.age > 22, User.age < 30) ) ) ).all() for result in results: print(result)
all code:
from model import User, Engine
import sqlalchemy
from sqlalchemy.orm import sessionmaker
from sqlalchemy import or_, and_, not_
Session = sessionmaker(bind=Engine)
session = Session()
def search_by_where():
# results = session.query(User).where(User.age > 23, User.name == "arthur").all()
results = session.query(User).where( (User.age > 30) | (User.name == "caster") | (User.name == "arthur") ).all() #两种或的结果是一致的,根据需要选择即可
# results = session.query(User).where(
# sqlalchemy.or_(
# User.age > 30, User.name == 'caster',
# )
# ).all() #可以体会一下两者的不同,判定条件少了一个名字==arthur
for result in results:
print(result)
def query_and():
# results = session.query(User).where(sqlalchemy.and_(
# User.age >= 25, User.name == "caster")
# )
results = session.query(User).where((
User.age >= 25) & (User.name == "caster")
)
for result in results:
print(result)
def query_by_not():
results = session.query(User).where(
sqlalchemy.not_(User.name == 'caster')
)
for result in results:
print(result)
def answer():
results = session.query(User).where(
or_(
not_(User.name=='arthur'), (
and_(User.age > 22, User.age < 30)
)
)
).all()
for result in results:
print(result)
if __name__ == '__main__':
# search_by_where()
# query_and()
# query_by_not()
answer()
关于filter
、filter_by
接口见02 中的增删查改吧,讲的应该还算详细。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- python SQLAlchemy ORM——从零开始学习 04 如何过滤(筛选)数据库中的数据
- 华为OD机试E卷 --分割数组的最大差值--24年OD统一考试(Java & JS & Python & C & C++)
- Python球球大作战
- Python GraphSAGE原理与代码详解,GraphSAGE代码实战,图神经网络,图计算,GraphSAGE代码模版,超简单学习GraphSAGE
- Python酷库之旅-第三方库Pandas(060)
- 【Python】BeautifulSoup:HTML解析
- python、tensorflow、keras的版本对应关系
- Linux上python离线安装教程
- 计算机毕业设计Python+CNN卷积神经网络小说推荐系统 K-means聚类推荐算法 深度学习 Kears 小说数据分析 可视化 Scrapy爬虫 协同过滤
- 华为OD机试E卷 --树状结构查询--24年OD统一考试(Java & JS & Python & C & C++)
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程