首頁 >後端開發 >Python教學 >Python程式設計下SQLAlchemy查詢條件設定的方法介紹

Python程式設計下SQLAlchemy查詢條件設定的方法介紹

不言
不言轉載
2018-10-23 16:47:533635瀏覽
這篇文章帶給大家的內容是關於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)

模糊查詢適用於只知道被查詢字串的一部分內容時,透過設定通配符的位置,可以查詢出不同的結果。通配符用百分號%表示。

假設表中的資料為:

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中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除