本篇文章给大家带来的内容是关于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
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))
以上就是python编程下sqlalchemy查询条件设置的方法介绍的详细内容。