首先,我來介紹一下什麼是ORM框架:python
O是object,也就類對象的意思,R是relation,翻譯成中文是關係,也就是關係數據庫中數據表的意思,M是mapping,是映射的意思。在ORM框架中,它幫咱們把類和數據表進行了一個映射,可讓咱們經過類和類對象就能操做它所對應的表格中的數據。ORM框架還有一個功能,它能夠根據咱們設計的類自動幫咱們生成數據庫中的表格,省去了咱們本身建表的過程。mysql
django中內嵌了ORM框架,不須要直接面向數據庫編程,而是定義模型類,經過模型類和對象完成數據表的增刪改查操做。sql
Django框架--ORM框架--數據庫的關係,以下圖所示:數據庫
既然用到的數據庫,那麼咱們就不得不提python中一個第三方模塊pymysqldjango
pip install PyMySQL
from pymysql import install_as_MySQLdb install_as_MySQLdb()
這兩句代碼主要做用是,讓Django框架可以以ORM框架的方式調用PyMySQL模塊。編程
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '127.0.0.1', # 數據庫主機 'PORT': 3306, # 數據庫端口 'USER': 'root', # 數據庫用戶名 'PASSWORD': 'mysql', # 數據庫用戶密碼 'NAME': 'django_demo' # 數據庫名字 } }
4. 在MySQL數據庫中建立數據庫app
create database laowang charset=utf8;
以上,咱們全部的準備工做就已準備完畢了。框架
那麼,接下來我將爲你們講解一下ORM框架如何使用。函數
想要定義模型類,咱們就須要知道什麼是模型類,直白的說模型類就是數據庫中的表,模型類中的屬性就是數據表中的字段。spa
from django.db import models #定義圖書模型類BookInfo class BookInfo(models.Model): btitle = models.CharField(max_length=20) bpub_date = models.DateField() bread = models.IntegerField(default=0) bcomment = models.IntegerField(default=0) is_delete = models.BooleanField(default=False) class Meta: db_table = 'tb_books' # 指明數據庫表名
注意:
使用ORM框架定義模型類時,模型類會自動幫咱們在數據表中建立一個ID字段用做數據表中的字段,而且這個字段是自增加的。
當咱們成功的定義了模型類之後,咱們須要進行數據庫遷移,不然數據庫中不會生成數據表。
遷移命令:
# 生成數據庫遷移文件 python manage.py makemigrations # 執行數據庫遷移文件 python manage.py migrate
提示:
須要執行數據庫遷移的子應用必需要在配置文件中進行註冊。
當咱們的定義的模型類增長新的字段時,也要從新遷移。
當咱們的數據表出現問題時,咱們能夠刪除生成的遷移文件,而後從新遷移數據庫。
既然咱們已經完成了,數據模型的定義,那麼接下來我就帶領你們對數據庫中的數據使用ORM框架進行增刪改查的操做。
# 第一種方式 book = BookInfo( btitle='西遊記', bput_date=date(1988,1,1), bread=10, bcomment=10 ) book.save() # 第二種方式 BookInfo.objects.create( btitle='西廂記', bput_date=date(1988,1,1), bread=3540, bcomment=1230 )
# 第一種方式 BookInfo.objects.get(name='西遊記').delete()
# 第一種方式 book = BookInfo.objects.get(name='西遊記') book.name = '西遊記後傳' book.save() # 第二種方式 BookInfo.objects.filter(name='西廂記').update(name='儒林外史')
基本查詢方式:
# 第一種方式:查詢所有數據 BookInfo.objects.all() # 第二種方式:查詢所有符合指定條件的數據 BookInfo.objects.filter(id__gt=1) # 第三種方式:查詢出一條符合條件的數據 BookInfo.objects.get(name='西廂記')
高級查詢方式:
''' 模糊查詢: 字段__contains='值' 模型類.objects.filter(字段__contains='值') 範圍查詢: 字段__in=[值1,....] 模型類.objects.filter(字段__in=['值1',...]) 空查詢: 字段__isnull=True 爲空 字段__isnull=False 非空 模型類.objects.filter(字段__isnull=True) 比較查詢: 字段__gt=值 --> 大於 字段__gte=值 --> 大於等於 字段__lt=值 --> 小於 字段__lte=值 --> 大於等於 模型類.objects.filter(字段__gt=值) 模型類.objects.filter(字段__gte=值) 邏輯查詢: F對象:兩個端相互比較時使用F對象 from django.db.models import F BookInfo.objects.filter(bread__gte=F('bcomment')) Q對象:通常是使用邏輯或(|)時使用Q對象 from django.db.models import Q BookInfo.objects.filter(Q(bread__gt=20) | Q(pk__lt=3)) 聚合函數: Avg(字段名) 平均, Count(字段名) 數量, Max(字段名) 最大, Min(字段名) 最小, Sum(字段名) 求和 count() 統計數量 排序: order_by(字段名) # 升序 order_by(-字段名) # 降序 關聯查詢: 一對多查詢: 一關係的模型類.多關係模型類名小寫_set.get/filter(查詢條件) 一關係的模型類.自定義的related_name的值.get/filter(查詢條件) 多對一查詢: 多關係的模型類.外鍵名.get/filter(查詢條件) '''
注意:
使用filter、all查詢出來的數據是一個查詢集,不能直接使用,想使用須要將查詢集便利出來。
# 獲取模型類集合 book_model_list = BookInfo.objects.filter(id__gte=3) # 便利模型類,將集合中的模型便利出來 for book_model in book_model_list: print(book_model.id) print(book_model.name)