视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Python编程下SQLAlchemy查询条件设置的方法介绍
2020-11-27 14:20:42 责编:小采
文档

本篇文章给大家带来的内容是关于Python编程下SQLAlchemy查询条件设置的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

在实际编程中需要根据各种不同的条件查询数据库记录,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)

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

假设表中的数据为:

iduser_nametitlesalary
1David LiSystem Manager3000
2Debeca LiAccountant3000
3David BackerEngineer3000
4Siemon BondEnfineer4000
5Van BergGeneral ManagerNULL
#查询所有名字包含字母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))

下载本文
显示全文
专题