django-6-模型models-mysql資料庫-簡單查詢
阿新 • • 發佈:2020-09-10
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物件可以繼續使用上述函式操作