Django框架之模型
出品人:灰度
模型詳解(上)
在講解之前先來說下MVC框架,M指的是模型(model)的意思是應用程序的核心,v指的是視圖(view)主要用來顯示內容,C呢就是控制器(Controller)主要用來控制輸入.MVC是一種編寫WEB應用的一種設計模式,他主要的目的是解耦,怎麽理解這就話,其實就是將業務代碼和視圖代碼分離,由控制器來進行調用進行數據的輸入輸出操作。在Django中不叫MVC叫MVT(其實是一樣的)。
1.理解什麽是ORM模型
首先理解什麽是ORM,簡單來說就是通過代碼來操作數據庫,通過對象來映射對應的sql代碼,無需編寫sql語句,自動生成數據庫表,它主要提供是三個功能:(1)允許我們通過面向對象的方式來操作數據庫(2)根據我們自己設計的模型,自動在數據庫中生成我們需要的數據表(3)可以很方便的配置,讓我們對數據庫進行切換操作
2.這裏我們拿mysql為例,Django默認使用自帶的sqlite3數據庫,我們來修改成我們自己的,修改settings.py文件,找到DATABASES
將其修改成下面的數據庫
在__init__.py中添加mysql驅動,前提是已經安裝了pymysql驅動
3.模板中的字段屬性
在模板中定義屬性有三條規則
(1)不能使用python 的關鍵字 例如:os
(2)不能使用雙下劃線,Django對雙下劃線敏感,涉及到Django查詢問題
(3)定義屬性時,必須指定屬性的類型
4.說道類型,下面列舉下Django中的類型
BooleanField:布爾字段,值為True或False。
CharField(max_length=字符長度):字符串
TextField:大文本字段,一般超過4000個字符時使用
IntegerField:整數
FloatField:浮點數
DateField:日期
TimeField:時間
DateTimeField:日期時間
FileField:上傳文件字段。
ImageField:
DecimalField(max_digits=None, decimal_places=None):十進制浮點數。
參數max_digits表示總位數。
參數decimal_places表示小數位數
5.字段屬性約束-------選項
null:如果為True,表示允許為空,默認值是False。
blank:如果為True,則該字段允許為空白,默認值是False。
* 對比:null是數據庫範疇的概念,blank是表單驗證證範疇的。
db_column:字段的名稱,如果未指定,則使用屬性的名稱。
db_index:若值為True, 則在表中會為此字段創建索引,默認值是False。
default:默認值。
primary_key:若為True,則該字段會成為模型的主鍵字段,默認值是False,一般作為AutoField的選項使用。
unique:如果為True, 這個字段在表中必須有唯一值,默認值是False。
下面讓我們寫個模型吧
執行遷移命令
python manage.py makemigrations #在終端項目下執行
python manage.py migrate #生成數據表
6.數據庫相關操作
在這裏,小編說聲抱歉寫的不夠細,具體的看說明文檔吧,我已經將網址寫在這裏,寫的還是很詳細的
參考網址:http://python.usyiyi.cn/translate/django_182/topics/db/queries.html
一、 查詢
1、單條數據查詢get()
例如查詢剛才我們創建的表中的數據
HeroInfo.objects.get(name=‘lisi‘)
2、查詢表中所有的數據all()
HeroInfo.objects.all() # 這裏說下它的返回值類型是QuerySet(查詢集)
3、過濾器查詢filter() # 可以理解為where
HeroInfo.objects.filter(name=‘lisi‘)相當於 HeroInfo.objects.all().filter(name=‘list‘)
4、模糊查詢contains 結尾 endswith 開頭startswith
HeroInfo.objects.get(name__contains=‘li‘) 相當於 select ....from HeroInfo where name like ‘%li%‘
5.空查詢 isnull
6.比較查詢 大於get 小於let
7.取反 exclude
二、引用Q對象查詢復雜的語句
通常Q對象用來查詢邏輯條件時用到 not and or
提示下先引入from django.db.models import Q
Q 對象可以使用& 和| 操作符組合起來
Q(question__startswith=‘Who‘) | Q(question__startswith=‘What‘)
F對象用於對象間的比較
BookInfo.objects.filter(bread__gt=F(‘bcomment‘))
Django框架之模型