1. 程式人生 > 實用技巧 >django-6-模型models-mysql資料庫-簡單查詢

django-6-模型models-mysql資料庫-簡單查詢

django-mysql資料庫配置

django配置mysql

1、安裝pymysql包

pip install pymysql

2、修改專案配置檔案settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 資料庫引擎
        'NAME': 'django_mysql',  # 資料庫名
        'USER': 'root',  # 賬號
        'PASSWORD': 'root',  # 密碼
        'HOST': '47.101.168.243',  # HOST
        'POST': 3606,  # 埠
    }
}

3、配置 test1/test1/init.py

import pymysql
pymysql.install_as_MySQLdb()

重定向

檢視函式不返回模板檔案,直接訪問另外一個檢視函式

from django.http import HttpResponse,HttpResponseRedirect
def show_hero(request, bid): 
    book = Bookinfo.objects.get(id=bid)
    heros = book.heroinfo_set.all()
    return "hello"

def add_book(request):
    print('刪除檔案成功')
    # 不返回模板檔案,跳轉到另外檢視函式
    return HttpResponseRedirect('/show_hero')
    
或者如下實現
from django.shortcuts import render,redirect
return redirect('/show_hero')

模型類--欄位屬性和選項

欄位型別

型別 描述
AutoField 自動增長的IntegerField,一般不需要指定
BooleanField 布林型別,是否,Ture/False
NullBooleanField 支援Null、True、Flase
CharField 字串
TextField 大文字
IntegerField 整數
DecimalField 十進位制浮點數,max_digits 總位, decimal_places 小數位
FloatField 浮點數
DateField 日期,auto_now_add 自動設定該欄位為當前時間,auto_now 自動修改為更新時間 ,年月日
TimeField 時間 ,小時
DateTimeField 日期時間 ,年月日 小時
FileField 檔案
ImageField 圖片檔案,繼承於FileField,校驗是否有效圖片

選項

選項名稱 描述
default 預設值
primary_key 主鍵設定
unique 唯一值
db_index 建立索引
db_column 設定指定表字段名稱
null 設定是否允許為空
blank 內容是否允許為空白,控制後臺管理是否允許不填

查詢

get() 返回一條,且只能有一條,返回模型物件
all() 返回所有資料,返回Queryset型別物件,叫查詢集
filter() 查詢條件
exclude() 返回不滿足條件的資料
order_by 對查詢結構排序

查詢條件的格式:屬性名__條件名=值

舉例

BookInfo.objects.get(id=1)
查詢條件 filter

判等:exact

BookInfo.objects.get(id__exact=1)

> 模糊查詢:contains
​```python
BookInfo.objects.filter(btitle__contains='傳' )

以什麼結尾endswith 開頭startswith

BookInfo.objects.filter(btitle__endswith='部' )
BookInfo.objects.filter(btitle__startswith='射' )

空查詢 isnull

BookInfo.objects.filter(btitle__isnull=False )

範圍查詢 in

BookInfo.objects.filter(id__in=[1,3,5])

比較查詢 gt lt gte lte 大於 小於 大於等於 小於等於

BookInfo.objects.filter(id__gt=1)  # id 大於1

日期查詢 year month day

BookInfo.objects.filter(bpub_date__year=1980)  # 1980年出版的圖書
from datetime import date
BookInfo.objects.filtet(bpub_date__gt=date(1980,1,1))  # 1980年之後出版的圖書
查詢條件 exclude
BookInfo.objects.exclude(id=3)  # 返回id不等於3的查詢集
查詢條件order by

order by all()方法可以省略

BookInfo.objects.all().order_by("id","btitle")  從小到大排序
BookInfo.objects.all().order_by("-id")  從大到小排序

F物件

用於類屬性之間的比較
使用之前需要先匯入F類

from django.db.models import F
# 查詢閱讀量大於評論量
BookInfo.objects.filter(bread__gt=Q('bcomment'))
# 查詢閱讀量大於兩倍評論量
BookInfo.objects.filter(bread__gt=Q('bcomment')*2)

Q物件

用於條件之間的邏輯關係,not and or ,可以使用Q物件進行操作,~ & |

 BookInfo.objects.filter(id__gt=3,bread__gt=30)  # id>3且閱讀量大於30
 BookInfo.objects.filter(Q(id__gt=3)&Q(bread__gt=30)) 且
 BookInfo.objects.filter(Q(id__gt=3)|Q(bread__gt=30))  或
 BookInfo.objects.filter(~Q(id__gt=3)&Q(bread__gt=30))  id不等於3,非

聚合函式

對結果集進行聚合操作 sum count max min avg
django使用聚合函式,必須使用aggregate來進行聚合,結果返回一個字典
使用前需要先匯入一個聚合類,如下

from django.db.models import Sum,Count,Max,Min,Avg
BookInfo.objects.all().aggregate(Count('id'))
# 返回結果:{'id_count':5}

count函式

或者去掉all()也可以

BookInfo.objects.all().count()
# 直接返回數量 5

注意,對於QuerySet物件可以繼續使用上述函式操作