1. 程式人生 > >Django---ORM框架

Django---ORM框架

HERE 關系模型 incr ibatis mysq tro -- nds 執行效率

一、get請求和post請求

GET請求:

1. 瀏覽器請求一個頁面
2. 搜索引擎檢索關鍵字的時候

POST請求:
1. 瀏覽器向服務端提交數據,比如登錄/註冊等

HTTP中GET與POST的區別

http://www.techweb.com.cn/network/system/2016-10-11/2407736.shtml

二 、 Django中的APP:

什麽是APP?以及為什麽要用APP?

project --> 項目

APP --> 應用

方便我們在一個大的Django項目中,管理實現不同的業務功能.

1. 創建APP的命令
1. 命令行,在Django項目的根目錄輸入:
python3 manage.py startapp app名字

技術分享圖片

技術分享圖片

技術分享圖片

三 、 ORM框架

一、ORM簡介
對象關系映射(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向對象與關系數據庫存在的互不匹配的現象的技術。簡單的說,ORM是通過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關系數據庫中。那麽,到底如何實現持久化呢?一種簡單的方案是采用硬編碼方式,為每一種可能的數據庫訪問操作提供單獨的方法。
這種方案存在以下不足:
1.持久化層缺乏彈性。一旦出現業務需求的變更,就必須修改持久化層的接口
2.持久化層同時與域模型與關系數據庫模型綁定,不管域模型還是關系數據庫模型發生變化,毒藥修改持久化曾的相關程序代碼,增加了軟件的維護難度。

ORM提供了實現持久化層的另一種模式,它采用映射元數據來描述對象關系的映射,使得ORM中間件能在任何一個應用的業務邏輯層和數據庫層之間充當橋梁。Java典型的ORM中間件有:Hibernate,ibatis,speedframework。
ORM的方法論基於三個核心原則:
  · 簡單:以最基本的形式建模數據。
  · 傳達性:數據庫結構被任何人都能理解的語言文檔化。
  · 精確性:基於數據模型創建正確標準化了的結構。

二、ORM的概念


讓我們從O/R開始。字母O起源於"對象"(Object),而R則來自於"關系"(Relational)。幾乎所有的程序裏面,都存在對象和關系數據庫。在業務邏輯層和用戶界面層中,我們是面向對象的。當對象信息發生變化的時候,我們需要把對象的信息保存在關系數據庫中。
當你開發一個應用程序的時候(不使用O/R Mapping),你可能會寫不少數據訪問層的代碼,用來從數據庫保存,刪除,讀取對象信息,等等。你在DAL中寫了很多的方法來讀取對象數據,改變狀態對象等等任務。而這些代碼寫起來總是重復的。

ORM解決的主要問題是對象關系的映射。域模型和關系模型分別是建立在概念模型的基礎上的。域模型是面向對象的,而關系模型是面向關系的。一般情況下,一個持久化類和一個表對應,類的每個實例對應表中的一條記錄,類的每個屬性對應表的每個字段。
ORM技術特點:
1.提高了開發效率。由於ORM可以自動對Entity對象與數據庫中的Table進行字段與屬性的映射,所以我們實際可能已經不需要一個專用的、龐大的數據訪問層。
2.ORM提供了對數據庫的映射,不用sql直接編碼,能夠像操作對象一樣從數據庫獲取數據。

三、ORM的優缺點

ORM的缺點是會犧牲程序的執行效率和會固定思維模式。
從系統結構上來看,采用ORM的系統一般都是多層系統,系統的層次多了,效率就會降低。ORM是一種完全的面向對象的做法,而面向對象的做法也會對性能產生一定的影響。

在我們開發系統時,一般都有性能問題。性能問題主要產生在算法不正確和與數據庫不正確的使用上。ORM所生成的代碼一般不太可能寫出很高效的算法,在數據庫應用上更有可能會被誤用,主要體現在對持久對象的提取和和數據的加工處理上,如果用上了ORM,程序員很有可能將全部的數據提取到內存對象中,然後再進行過濾和加工處理,這樣就容易產生性能問題。
在對對象做持久化時,ORM一般會持久化所有的屬性,有時,這是不希望的。
但ORM是一種工具,工具確實能解決一些重復,簡單的勞動。這是不可否認的。但我們不能指望工具能一勞永逸的解決所有問題,有些問題還是需要特殊處理的,但需要特殊處理的部分對絕大多數的系統,應該是很少的。

ORM的對應關系:
類 ---> 數據表
對象 ---> 數據行
屬性 ---> 字段

ORM能做的事兒:
1. 操作數據表 --> 創建表/刪除表/修改表
操作models.py裏面的類

2. 操作數據行 --> 數據的增刪改查


不能創建數據庫,自己動手創建數據庫

使用Django的ORM詳細步驟:
  1. 自己動手創建數據庫
  create database 數據庫名;
  2. 在Django項目中設置連接數據庫的相關配置(告訴Django連接哪一個數據庫)
  # 數據庫相關的配置
  DATABASES = {
  ‘default‘: {
  ‘ENGINE‘: ‘django.db.backends.mysql‘, # 連接的數據庫類型
  ‘HOST‘: ‘127.0.0.1‘, # 連接數據庫的地址
  ‘PORT‘: 3306, # 端口
  ‘NAME‘: "day61", # 數據庫名稱
  ‘USER‘: ‘root‘, # 用戶
  ‘PASSWORD‘: ‘123456‘ # 密碼
  }
}
  3. 告訴Django用pymysql代替默認的MySQLDB 連接MySQL數據庫
  在項目/__init__.py文件中,寫下面兩句:
  import pymysql
  # 告訴Django用pymysql來代替默認的MySQLdb
  pymysql.install_as_MySQLdb()
  4. 在app下面的models.py文件中定義一個類,這個類必須繼承models.Model
  class 類名(models.Model):
  ...
  5. 執行兩個命令
  1. python3 manage.py makemigrations
  2. python3 manage.py migrate


  ORM單表的增加和查詢:
  1. 查詢
  models.UserInfo.objects.all()

  2. 增加
  models.UserInfo.objects.create(name="張三")

一、創建表

1. 自己動手創建數據庫

create database day61<br>create table userinfo(id int auto_increment primary key varchar(10) not null ,pwd varchar(18) not null

2. 在Django項目中設置連接數據庫的相關配置(告訴Django連接哪一個數據庫)

# 數據庫相關的配置
DATABASES = {
‘default‘: {
‘ENGINE‘: ‘django.db.backends.mysql‘, # 連接的數據庫類型
‘HOST‘: ‘127.0.0.1‘, # 連接數據庫的地址
‘PORT‘: 3306, # 端口
‘NAME‘: "day61", # 數據庫名稱
‘USER‘: ‘root‘, # 用戶
‘PASSWORD‘: ‘123456‘ # 密碼
}
}

在setting文件夾下做如下配置

DATABASES = {
    default: {
        # ‘ENGINE‘: ‘django.db.backends.sqlite3‘,
        # ‘NAME‘: os.path.join(BASE_DIR, ‘db.sqlite3‘),

        #連接數據庫類型
        ENGINE:django.db.backends.mysql,
        ##連接數據庫的地址
        HOST:127.0.0.1,
        ##數據庫名稱
        NAME:day61,
        #用戶
        USER: root,
        #密碼 
        PASSWORD:123456

    }
}

技術分享圖片

3. 告訴Django用pymysql代替默認的MySQLDB 連接MySQL數據庫

在_init_.py文件下寫代碼

import pymysql
pymysql.install_as_MySQLdb()

技術分享圖片

4. 在app下面的models.py文件中定義一個類,這個類必須繼承models.Model

在module文件下添加

from django.db import models
 
# Create your models here.
 
#ORM 相關的只能寫在這個文件中,寫到別的文件裏Django找不到.
 
class UserInfo(models.Model):
    id = models.AutoField(primary_key= True)#創建一個自增的主鍵字段
    name =models.CharField(null=False,max_length=32)#創建一個varchar(20)類型的不能為空的名字字段

技術分享圖片

5. 執行兩個命令

python3 manage.py makemigrations
python3 manage.py migrate

技術分享圖片

查看表格 在mysql數據庫裏

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

二、刪除表

把下面的語句註釋掉然後執行 那兩個語句
class UserInfo(models.Model):
    id = models.AutoField(primary_key= True)#創建一個自增的主鍵字段
    name =models.CharField(null=False,max_length=32)#創建一個varchar(20)類型的不能為空的名字字段
1. python3 manage.py makemigrations
2. python3 manage.py migrate<br><span style="color: #ff0000;"><strong>記錄在了小本本 裏</strong></span><br><br>

技術分享圖片

三、改表

修改class userinfo 的代碼在執行兩個指令

四、添加數據

技術分享圖片

技術分享圖片

技術分享圖片

五、表單操作之列表展示

在django project中url裏添加數據

from app01 import views
 
 
urlpatterns=[
    # url(r‘^yimi/‘,yimi),
    # url(r‘^xiaohei/‘,xiaohei),
    url(r‘^index/‘,views.index),
    # url(r‘^user_list/‘,user_list)
    url(r‘^user_list/‘,views.user_list)
]

在app01的views 裏添加

from django.shortcuts import HttpResponse, render
from app01 import  models
def user_list(request):
    #去數據庫中查詢所有的用戶
    #利用orm這個工具去查詢數據庫,不用自己去查詢
<strong>    ret = models.UserInfo.objects.all()
</strong>    print(ret[0].id,ret[0].name)
    #打開user_list.html文件
    return render(request,‘user_list.html‘,{‘user_list‘:ret})

在建一個html文件

技術分享圖片

展示

技術分享圖片

Django---ORM框架