模型查詢 過濾器

2021-10-09 04:50:00 字數 4373 閱讀 1113

查詢集表示從資料庫獲取的物件集合,查詢集可以有多個過濾器,過濾器就是乙個函式,基於所給的引數限制查詢集結果,建立查詢集不會帶來任何資料的訪問,直到呼叫資料時,才會訪問資料。

建立學生模型

class student(models.model):

s_name = models.charfield(max_length=10,unique=true) # 指定學生名唯一

s_age = models.integerfield() # 學生姓名

s_gender = models.booleanfield(default=true) # 學生性別預設為true

isdelete = models.booleanfield(default=false) # 設定邏輯刪除字段

grade = models.foreignkey(grade) # 關聯班級

class meta:

db_table = 'student' # 指定表名

ordering = ['id'] # 以id排序

def __str(self)__:

return self.s_name # 查詢集的返回顯示學生姓名

class studentmanager(models.manager):

def get_queryset(self):

return super(studentsmanager,self).get_queryset().filter(isdelete=false) # 自定義模型管理器,重寫父類get_queryset()方法,過濾查詢集

建立班級模型

class grade(models.model):

g_name = models.charfield(max_length=10,unique=true) # 建立班級名指定唯一

class meta:

db_table = 'grade'

ordering = ['id']

def __str(self)__:

return self.g_name

建立課程模型

class course(models.model):

c_name = models.charfield(max_length=10) # 課程名

start_date = models.datefield(auto_now_add) # 開課日期

end_date = models.datefield(auto_now_add) # 結束日期

stu = models.manytomanyfield(student)

class meta:

db_table = 'course'

ordering = ['start_date']

def __str(self)__:

return self.c_name

建立學生資訊模型

class studentinfo(models.model):

phone = models.integerfield() # 手機號

address = models.charfield(max_length=20) # 位址

stu =onetoonefield(student)

class meta:

db_table = 'studentinfo'

student.objects.all() # 返回查詢集中的所有資料

student.objects.filter(pk=3) # 返回符合條件的資料

student.objects.filter(s_age=20).filter(s_gender=true) # 滿足兩種條件的查詢方式一 studen.objects.filter(s_age=20,s_gender=false) # 滿足兩種條件的查詢方式二

studen.objects.exclude(s_name='tom') # 過濾掉符合條件的資料,查詢不滿足條件的其他資料

studen.objects.order_by('s_age') # 以年齡排序,公升序

studen.objects.order_by('-s_age') # 以年齡排序,降序

studen.objects.values() # 將所有物件及屬性返回

studen.objects.values('s_name') # 返回所有物件的名字

返回單個資料

studen.objects.get(pk=1) # 返回乙個滿足條件的物件,如果沒有找到符合條件的物件,會引發"模型類.doesnotexist"異常,如果找到多個物件,會引發"模型類.multipleobjectsreturned"異常

studen.objects.filter(s_gender=true).count() # 返回當前查詢集中的物件個數

studen.objects.filter(s_gender=true).first() # 返回查詢集中的第乙個物件

studen.objects.filter(s_gender=true) # 返回查詢集中的最後乙個物件

studen.objects.filter(s_name='tom').exists() # 判斷查詢集中是否有資料,如果有資料返回true

限制查詢集

studentslist = student.objects.all()[0:5] # 注意:下標不能是負數

查詢集的快取:在新建的查詢集中,快取首次為空,第一次對查詢集求值,會發生資料快取,django會將查詢出來的資料做乙個快取,並返回查詢結構,以後的查詢直接使用查詢集的快取。

比較運算子

studen.objects.filter(s_name__contains='王') # 查詢名字包含王的學生,大小寫敏感 studen.objects.filter(s_name__startswith='孫') # 查詢名字以開頭的學生,大小寫敏感 studen.objects.filter(s_name__endswith='雨') # 查詢名字以結尾的學生,大小寫敏感

以上四個在前面加上i,就表示不區分大小寫iexact、icontains、istartswith、iendswith

studeninfo.objects.filter(address isnull) # 查詢位址是空的學生資訊

studeninfo.objects.filter(address isnotnull) # 查詢位址不是空的學生資訊

studen.objects.filter(pk in (2,4,6)) # 查詢pk在(2,4,6)的學生

studen.objects.filter(s_age__gt=20) # 查詢年齡大於20的學生

studen.objects.filter(s_age__gte=20) # 查詢年齡大於等於20的學生

studen.objects.filter(s_age__lt=30) # 查詢年齡小於30的學生

studen.objects.filter(s_age__lte=30) # 查詢年齡小於等於30的學生

course.objects.filter(start_date__year=2016) # 查詢開課課程在2023年的課程 course.objects.filter(start_date__year=2016,start_date__month=10) # 查詢開課課程在2023年10月的課程

# year-month-day-week_day-hour-minute-second

跨關聯查詢

studen.objects.filter(course__c_name__contains='程式設計')# 查詢

課程中帶有

程式設計的課程

被選擇的

學生

SQLAlchemy查詢過濾器和執行函式

過濾器返回結果 filter 把過濾器新增到原查詢上,返回乙個新查詢 filter by 把等值過濾器新增到原查詢上,返回乙個新查詢 limit 使用指定的值限定原查詢返回的結果 offset 偏移原查詢返回的結果,返回乙個新查詢 order by 根據指定條件對原查詢結果進行排序,返回乙個新查詢 ...

HBase 資料查詢,過濾器的使用

public static void main string args throws exception 4.關閉資源 tab.close base中只能按照指定行鍵行鍵範圍或全表掃瞄來查詢資料 hbase還提供了過濾器機制,可以在原有的查詢結果的基礎上,在伺服器端實現進一步的過濾,返回符合過濾條件...

Vue 過濾器案例(全域性過濾器和區域性過濾器)

doctype html en utf 8 viewport content width device width,initial scale 1.0 js vue 2.4.0 js script 過濾器 title head 兩個過濾器的名稱都為msgformat,但是控制不同作用,乙個是全域性的...