如何使用SQLAlchemy ORM过滤数据库中的特定数据?

摘要:04 如何过滤(筛选)数据库中的数据 从数据库中获筛选数据主要应用以下几个接口:filter、filter_by、以及 where。前两个在 02已经展开说过,先展开说where接口 前情提要:依赖03提及的model【本质上就是数据库的链
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进行筛选 经过上述的知识,已经能掌握逻辑运算筛选了,出个题,读者可以自行尝试,能够达到自己预期的效果则过关了。
阅读全文