资讯专栏INFORMATION COLUMN

Python-SQLAlchemy:第2节:查询条件设置

selfimpr / 1298人阅读

摘要:上一篇文章第节入门下一篇文章第节关系操作在实际编程中需要根据各种不同的条件查询数据库记录,查询条件被称为过滤器。通配符用百分号表示。以下条语句查询结果相同,都是为的记录。引入或逻辑关键字查询是或者为的记录,返回结果为为的记录

上一篇文章:Python-SQLAlchemy:第1节:SQLAlchemy入门
下一篇文章:Python-SQLAlchemy:第3节:关系操作

在实际编程中需要根据各种不同的条件查询数据库记录,SQLAlchemy查询条件被称为过滤器。这里列出了最常用的过滤器的使用方法。

1、等值过滤器(==)

等值过滤器用于判断某列是否等于某值,是最常用的过滤器。

session.query(Account).filter(Account.user_name=="Mark") #判断字符串类型
session.query(Account).filter(Account.salary==2000) #判断数值类型
2、不等过滤器(!=、<、>、<=、>=)

与等值过滤器相对的是不等于过滤器,不等于过滤器可以延伸为几种形式:不等于、小于、大于、小于等于、大于等于。

session.query(Account).filter(Account.user_name !="mark" ) #不等于字符串类型
session.query(Account).filter(Account.salary !=2000) #不等于数值类型
session.query(Account).filter(Account.salary >2000) #大于过滤器
session.query(Account).filter(Account.salary <2000) #小于过滤器
session.query(Account).filter(Account.salary <=2000) #小于等于过滤器
session.query(Account).filter(Account.salary >=2000) #大于等于过滤器
3、模糊查询(like)

模糊查询适用于只知道被查询字符串的一部分内容时,通过设置通配符的位置,可以查询出不同的结果。通配符用百分号%表示。

假设表中的数据为:

id user_name title salary
1 David Li System Manager 3000
2 Debeca Li Accountant 3000
3 David Backer Engineer 3000
4 Siemon Bond Enfineer 4000
5 Van Berg General Manager NULL
#查询所有名字包含字母i的用户,结果包括id为1、2、3、4的4条记录
session.query(Account).filter(Account.user_name.like("%i%"))

#查询所有title中以Manager结尾的用户,结果包括id为1、5的两条记录
session.query(Account).filter(Account.title.like("%Manager"))

#查询所有名字中以Da开头的用户,结果包括id为1、3的两条记录
session.query(Account).filter(Account.user_name.like("Da%"))
注意:模糊查询只适用于查询字符串类型,不适用于数值类型。
4、包括过滤器(in_)

当确切的知道要查询记录的字段内容,但是一个字段有多个内容要查询时,可以用包含过滤器。

#查询id不为1,3,5的记录,结果包含id为2,4的两条记录
session.query(Account).filter(~Account.id.in_([1,3,5]))
#查询工资不为2000、3000、4000的记录,结果包含id为5的1条记录
session.query(Account).filter(~Account.id.in_([2000,3000,4000]))
#查询所有title不为Engineer和Accountant记录,结果包括id为1、5的两条记录
session.query(Account).filter(~Account.title.in_(["Accountant","Engineer"]))
5、判断是否为空(is NULL、is not NULL)

空值NULL是数据库字段中比较特殊的值。在SQLAlchemy中支持对字段是否为空进行判断。判断时可以用等值、不等值过滤器筛选,也可以用is、isnot进行筛选。

#查询salary为空值的记录,结果包含id为5的记录
#下面两方式效果相同
session.query(Account).filter(Account.salary==None)
session.query(Account).filter(Account,salary.is_(None))

#查询salary不为空值的记录,结果包含id为1、2、3、4的记录
#下面两方式效果相同
session.query(Account).filter(Account.salary!=None)
session.query(Account).filter(Account.salary.isnot(None))
6、非逻辑(~)

当需要查询不满足某条件的记录时可以使用非逻辑。

#查询id不为1、3、5的记录,结果包含id为2、4的两条记录
session.query(Account).filter(~Account.id.in_([1,3,5]))

#查询工资不为2000、3000、4000的记录,结果包含id为5的1条记录
session.query(Account).filter(~Account.id.in_([2000,3000,4000]))

#查询所有title不为Engineer和Accountant的记录,结果包括id为1、5的2条记录。
session.query(Account).filter(~Account.title.in(["Accountant","Engineer"]))
7、与逻辑(and_)

当需要查询同时满足多个条件的记录时,需要用到与逻辑。在SQLAlchemy中与逻辑可以有3种表达方式。

以下3条语句查询结果相同,都是id为3的记录。

#直接在filter中添加多个条件即表示与逻辑
session.query(Account).filter(Account.title=="Engineer",Account.salary=3000)

#用关机子and_进行逻辑查询
from sqlalchemy import and_
session.query(Account).filter(and_(Account.title=="Engineer",Account.salary=3000))

#通过多个filter的链接表示与逻辑
session.query(Account).filter(Account.title=="Engineer").filter(Account.salary=3000)
8、或逻辑(or_)

当需要查询多个条件但只需其中一个条件满足时,需要用到或逻辑。

#引入或逻辑关键字or_
from sqlalchemy import or_

#查询title是Engineer或者salary为3000的记录,返回结果为id为1、2、3、4的记录
session.query(Account).filter(or_(Account.title=="Engineer",Account.salary=3000))

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44829.html

相关文章

  • Python-SQLAlchemy3:关系操作

    摘要:本节围绕在中如何定义关系及如何使用关系进行查询进行讲解,使读者能够快速掌握的关系操作。班级与学生为一对多关系,班级与老师之间为多对多关系。三年二班多对多关系的使用通过关联模型实现,在其中分别设置模型和的外键,并且在父模型中设置相应的实现。 上一篇文章:Python-SQLAlchemy:第2节:查询条件设置下一篇文章:Python-SQLAlchemy:第4节:级联 关系数据库是建立...

    William_Sang 评论0 收藏0
  • Python-SQLAlchemy1:SQLAlchemy入门

    摘要:下一篇文章第节查询条件设置是编程语言下的一款开源软件。提供了工具包及对象关系映射工具,使用许可证发行。在关闭连接时会自动进行事务提交操作。引入多条件查询时使用。由于上下文函数退出时会自动提交事务,所以无需显示的调用使新增生效。 下一篇文章:Python-SQLAlchemy:第2节:查询条件设置 SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系...

    noONE 评论0 收藏0
  • Python-SQLAlchemy4:级联

    摘要:上一篇文章第节关系操作级联是在一对多关系中父表与子表进行联动操作的数据库术语。注意级联独立于本身针对外键的级联定义。代码执行后数据库表中的内容的变化表五年二班理想路号楼表理想男静安区女静安区小马哥女闸口区张三韩永跃男静安区 上一篇文章:Python-SQLAlchemy:第3节:关系操作 级联是在一对多关系中父表与子表进行联动操作的数据库术语。因为父表与子表通过外键关联,所以对父表或...

    henry14 评论0 收藏0
  • Python-SQLALchemy

    摘要:因为是工作在一个内部,有时候我们可能不小心做了一些误删除的操作,可以回滚。我们先修改的用户名为,然后重新添加一个新,但是记住这个时候我们还没有。集合类型可以是各种合法类型,比如,但是默认集合是一个。 官方文档 Initialization # 检查是否已经安装以及版本号 >>> import sqlalchemy >>> sqlalchemy.__version__ ’1.1.4‘ ...

    kumfo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<