這幾天從新學習了一下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')
執行結果
好了以上就是一些經常使用的單表查詢
若是您以爲好請點贊 謝謝!