在實際程式設計中需要根據各種不同的條件查詢資料庫記錄,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))
以上是Python程式設計下SQLAlchemy查詢條件設定的方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!