django之orm單表查詢

這幾天從新學習了一下django的orm,以此做爲記錄來分享。python

 

Part1:修改配置,生成表mysql

在寫數據和查數據以前,首先先得把django配置一下,具體配置以下:sql

1.先在公共項目的settings中配置數據庫信息數據庫

 

 2.在公共項目的__init__.py文件中導入pymysql並寫入一行代碼django

 

 

3.在須要生成表的app的models.py中寫生成的表瀏覽器

from django.db import models  

# Create your models here.


class Book(models.Model):
    username = models.CharField(max_length=64, unique=True)
    email = models.EmailField()
    password = models.CharField(max_length=128)
    register_date = models.DateTimeField("註冊日期", auto_now_add=True)
    signature = models.CharField(verbose_name="簽名", max_length=128, blank=True, null=True)
    num = models.IntegerField(null=True)

    def __str__(self):

        return self.username

 

 這3步都完成後,咱們就能夠經過命令行來建立表了(在項目根目錄執行)app

1. python manage.py makemigrations函數

2.python manage.py migrate學習

執行完之後你就能夠去數據庫查看一下 表了spa

 

 紅框就是你app名加上類名拼接出來的表名,ok經過django把表建好了,那接下來咱們就開始增長數據和查詢數據!!!

 

Part2:新增數據

先在view.py中新增一個視圖函數

 

方式一:

from django.shortcuts import render, HttpResponse

# Create your views here.

from GmTool.models import Book


def single_table(request):

    # ---------------------------------------------新增---------------------------------------------#

    # 方式一:
    book_obj = Book(username='leogao', email='1823231344', password='19961030', register_date='2020-10-30', signature='hh', num=100)
    book_obj.save()
    return HttpResponse('OK')

此時在瀏覽器器訪問接口,我這邊是本地啓的服務:http://127.0.0.1:8000/study/orm ,頁面會返回一個ok,查看數據庫中的GmTool,以下圖已成功新增

 

 

方式二:

from django.shortcuts import render, HttpResponse

# Create your views here.

from GmTool.models import Book


def single_table(request):

    # ---------------------------------------------新增---------------------------------------------#
    
    # 方式二: create返回值就是當前生成的對象記錄
    book_obj_two = Book.objects.create(username='biyuting', email='18232324544', password='19951030', register_date='2020-10-30', signature='hhh', num=200)
    return HttpResponse('OK')

此時在瀏覽器器訪問接口,http://127.0.0.1:8000/study/orm ,頁面會返回一個ok,查看數據庫中的GmTool,以下圖已成功新增

 

 

以上兩種方法演示了新增數據的方法,接下來咱們看下單標查詢的一些經常使用接口

 

Part3:單表查詢

models文件

from django.db import models

# Create your models here.


class Book(models.Model):
    username = models.CharField(max_length=64, unique=True)
    email = models.EmailField()
    password = models.CharField(max_length=128)
    register_date = models.DateTimeField("註冊日期", auto_now_add=True)
    signature = models.CharField(verbose_name="簽名", max_length=128, blank=True, null=True)
    num = models.IntegerField(null=True)

    def __str__(self):

        return self.username

表中的數據:

1.all方法:將對象中的全部數據都取出來,以QuerySet的格式返回

# (1) all方法
    book = Book.objects.all()  # 返回的是QuerySet對象   調用的是QuerySet對象
    print(book)
    for obj in book:  # 遍歷能夠每一個對象中的屬性
        print(obj.email)

    return HttpResponse('OK')

 

執行結果:

 

 

2.filter方法:過濾,以QuerySet的格式返回

 

book = Book.objects.filter(username='leogao')  # 返回的是QuerySet對象 一樣能夠遍歷哦 調用的是QuerySet對象
    print(book)
    return HttpResponse('OK')

 

執行結果:

 

 

3.first,last方法:去最後一個值或第一個值,返回的是module對象

book = Book.objects.all().first()  # first出來的module能夠直接去調對應的屬性 last同理
    print(book)
    book = Book.objects.all().last()
    print(book)
    return HttpResponse('OK')

執行結果:

 

 

4.get 結果只能有且只有一個 返回的是module對象 調用的是QuerySet對象

 

# (4) get 結果只能有且只有一個  返回的是module對象  調用的是QuerySet對象
    book = Book.objects.get(username='leogao')  # get出來的module能夠直接去調對應的屬性
    print(book.email)
    return HttpResponse('OK')

 

執行結果:

 

 

5.exclude() 過濾!= 調用queryset對象,返回一個queryset對象

book = Book.objects.exclude(email='1823231344')
    print(book)
    return HttpResponse('OK')

執行結果:

 

 

6.order_by() 排序 ,調用queryset對象, 返回一個queryset對象

book = Book.objects.all().order_by('id')  # id是正序,-id是倒序  一樣能夠遍歷
    print(book)
    for obj in book:print(obj.email)
    return HttpResponse('OK')

執行結果:

 

 

7.reserve() 將排序倒轉, 調用queryset對象, 返回一個queryset對象

 

 

book = Book.objects.order_by('-id').reverse()
    print(book)
    return HttpResponse('OK')

執行結果

 

 

8.count() 計算queryset中對象的個數 調用queryset對象, 返回一個int

book = Book.objects.all().count()
    print(book)
    return HttpResponse('OK')

執行結果

 

 

9.exist() 查看返回的querysert有沒有值 調用queryset對象,返回布爾值

book = Book.objects.all().exists()
    print(book)
    return HttpResponse('OK')

執行結果

 

 

10.values 獲取對應字段的值   調用queryset對象, 返回一個queryset對象

book = Book.objects.all().values('email', 'username')
    print(book)
    return HttpResponse('OK')

執行結果

 

 

11.values_list :將value的值放在一個元祖中  調用queryset對象, 返回一個queryset對象

book = Book.objects.all().values_list('password', 'username')
    print(book)
    return HttpResponse('OK')

執行結果

 

 

12.distinct: 將重複的結果去重  調用queryset對象, 返回一個queryset對象 從返回結果中剔除重複結果

book = Book.objects.all().values('email').distinct()
    print(book)

    return HttpResponse('OK')

執行結果

 

 

好了以上就是一些經常使用的單表查詢 

 

 

 

若是您以爲好請點贊 謝謝!

相關文章
相關標籤/搜索