Django——8 關系表的數據操作 表關聯對象的訪問 多表查詢


Django

  1. 關系表中的數據操作
  2. 表關聯對象的訪問
    1. 關聯對象的add方法
    2. create方法
    3. remove方法
    4. clear方法
  3. 多表查詢
  4. 查詢補充
    1. 聚合查詢
    2. 分組查詢
    3. F查詢
    4. Q查詢

 

 

關系表的數據操作

在views中導入modles模型中的,Django7中創建的模型

from .models import Department, Student, Stu_Detail, Course

先給Department添加數據

def doo(request):
    # department添加數據
    d1 = Department(d_name='計算機').save()
    Department.objects.get_or_create(d_name='外國語')
    Department.objects.create(d_name='電子')
    d4 = Department(d_name='美術').save()

    return HttpResponse('添加數據成功')

 

一對多的數據添加

Student添加數據

 方法一:

# Student添加數據、方法一:直接添加
    Student.objects.get_or_create(s_name='小明', department_id=1)
    s2 = Student(s_name='小紅', department_id=2).save()

方法二:

    # 方法二查找后添加
    d4 = Department.objects.get(d_name='美術')
    s3 = Student(s_name='小美')
    s3.department = d4
    s3.save()
    d3 = Department.objects.get(d_id=3) # 電子
    s3 = Student(s_name='小草')
    s3.department = d3
    s3.save()

 

  • 1.第一種方式就是跟之前的一樣,用傳參的方法添加,需要注意的是外鍵的值必須是關聯表中已經存在的值.
  • 2.第二種方式是用的屬性賦值的方式,因為我們在模型類有定義了一個department的屬性,而這個屬性的對象的類型必須是department表的類實例對象

 

 表關聯對象的訪問

在學生表和學院表之間進行關聯對象的訪問

這里我們通過python manage.py shell 來進行

先導入數據模型

通過s1的學院信息

Student的模型類中我們有定義department的屬性,所以當我們去訪問的時候,可以直接通過student.department的形式去找到某個學生的所屬學院是哪個.

查看一個d1學院的所有學生 ()

  如果模型I有一個ForeignKey,那么該ForeignKey 所指的模型II實例可以通過一個管理器回前面有ForeignKey的模型I的所有實例。默認情況下,這個管理器的名字為foo_set,其中foo 是源模型的小寫名稱。
  主鍵查看外鍵用_set.all()

 

可以在定義時設置related_name 參數來覆蓋foo_set 的名稱.

 

添加了related_name的參數后,重新打開一個IDLE,
訪問時就能直接用設置的參數作為屬性了.

這樣使用_set的地方就可以用related_time來替換

 

現在給Course添加數據

 

 在學生表中再添加一些數據:

現在再來查詢一下學院1的所有學生

 

 

處理關聯對象的方法

  • add(obj1, obj2, ...)  添加的已經存在數據庫的數據
  • 添加一指定的模型對象到關聯的對象集中。

 

 注意Course的多對多屬性student,現在

使學生1選擇了課程1

使學生5選擇了課程3

 

 

 現在把再學院2的王五換到學院3

 

 

  •  create(**kwargs)  添加不存在的數據 ,將數據直接存入數據庫
  • 創建一個新的對象,將它保存並放在關聯的對象集返回新創建的對象。

學院4來了個新同學小雅

 

 remove(obj1, obj2, ...)

  • 從關聯的對象集中刪除指定的模型對象。
  • 刪除的是關系表中的數據

首先先添加一些數據

 

 clear()    從關聯的對象集中刪除所有的對象

 

 注意對於所有類型的關聯字段,add()、create()、remove()和clear()都會馬上更新數據庫。換句話說,在關聯的任何一端,都不需要再調用save()方法。

 多表查詢——跨關聯關系的查詢

Django 提供一種強大而又直觀的方式來“處理”查詢中的關聯關系,它在后台自動幫你處理JOIN。

若要跨越關聯關系,只需使用關聯的模型字段的名稱,並使用雙下划線分隔,直至你想要的字段:

查詢學院名字為‘計算機學院’的學生的信息

# 查詢學院名字為‘計算機’的學生的信息
    res = Student.objects.filter(department__d_name='計算機')

查詢學生名字中包含 '小' 的學生的學院信息

# 查詢學生名字中包含 '小' 的學生的學院信息
    res = Department.objects.filter(student__s_name__contains='')

 

查詢學號為1的學生所有的課程

# 查詢學號為1的學生所有的課程
    res = Course.objects.filter(student__s_id=1)

 查詢報了課程1的所有的學生

# 查詢報了課程1的所有的學生
    res = Student.objects.filter(course__c_id=1)

查詢報了'python'課程的的學生的所屬學院的信息

# 查詢報了'python'課程的的學生的所屬學院的信息
    res = Department.objects.filter(student__course__name='python')

 

 

 

聚合查詢

分組查詢

F查詢

from django.db.models import Q, F

 

Q查詢

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM