Django之ORM

 

                                                                              Object Relational Mapping(ORM)                                                                                  

ORM介紹

ORM概念

對象關係映射(Object Relational Mapping,簡稱ORM)模式是一種爲了解決面向對象與關係數據庫存在的互不匹配的現象的技術。python

簡單的說,ORM是經過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關係數據庫中。mysql

ORM在業務邏輯層和數據庫層之間充當了橋樑的做用。程序員

ORM由來

讓咱們從O/R開始。字母O起源於"對象"(Object),而R則來自於"關係"(Relational)。sql

幾乎全部的軟件開發過程當中都會涉及到對象和關係數據庫。在用戶層面和業務邏輯層面,咱們是面向對象的。當對象的信息發生變化的時候,咱們就須要把對象的信息保存在關係數據庫中。數據庫

按照以前的方式來進行開發就會出現程序員會在本身的業務邏輯代碼中夾雜不少SQL語句用來增長、讀取、修改、刪除相關數據,而這些代碼一般都是重複的。django

ORM的優點

ORM解決的主要問題是對象和關係的映射。它一般把一個類和一個表一一對應,類的每一個實例對應表中的一條記錄,類的每一個屬性對應表中的每一個字段。 服務器

ORM提供了對數據庫的映射,不用直接編寫SQL代碼,只需像操做對象同樣從數據庫操做數據。app

讓軟件開發人員專一於業務邏輯的處理,提升了開發效率。工具

ORM的劣勢

ORM的缺點是會在必定程度上犧牲程序的執行效率。post

ORM用多了SQL語句就不會寫了,關係數據庫相關技能退化...

ORM總結

ORM只是一種工具,工具確實能解決一些重複,簡單的勞動。這是不能否認的。

但咱們不能期望某個工具能一勞永逸地解決全部問題,一些特殊問題仍是須要特殊處理的。

可是在整個軟件開發過程當中須要特殊處理的狀況應該都是不多的,不然所謂的工具也就失去了它存在的意義。

form表單提交數據注意事項:

1 注意form的拼寫,不是from,並且在form後必須有action(URL)和method(可使POST或者GET)

2 全部的獲取用戶輸入的表單標籤都放在form表單裏面,並且表單標籤必須有name標籤。

3 form表單必須有submit按鈕。

POST與GET的使用問題:

GET:向服務器請求一個網頁的時候,

           搜索引擎檢索的時候

           使用get的時候,提交的數據會跟在咱們URL?後面,也就是咱們get提交的數據。

POST:使用表單向服務器提交數據時。

          使用post的時候,URL中是看不到咱們提交的數據的。

關於request:

request.method  獲得的是你請求的方法(POST或者GET。。。)

咱們在form表單中method後面能夠小寫咱們的post或者get,可是在Django中必須大寫(POST,GET)

 request.POST   獲得的是POST請求發過來的所有數據(是以字典的形式發的)

咱們經過這個能夠拿到咱們想要的全部的數據:request.POST.all(),

 

                                                                  Django中的ORM                                                                    

在Django項目的settings.py文件中,配置數據庫鏈接信息:

在DATABASES中咱們須要制定咱們的數據庫,

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "你的數據庫名稱",  # 須要本身手動建立數據庫
        "USER": "數據庫用戶名",
        "PASSWORD": "數據庫密碼",
        "HOST": "數據庫IP",
        "POST": 3306
    }
}

 

2. 在Django項目的__init__.py文件中寫以下代碼,告訴Django使用pymysql模塊鏈接MySQL數據庫:

import pymysql

pymysql.install_as_MySQLdb()

 

 

                                                               models                                                                

在Django中model是你數據的單1、明確的信息來源。它包含了你存儲的數據的重要字段和行爲。一般,一個模型(model)映射到一個數據庫表,

基本狀況:

  • 每一個模型都是一個Python類,它是django.db.models.Model的子類。
  • 模型的每一個屬性都表明一個數據庫字段。
  • 綜上所述,Django爲您提供了一個自動生成的數據庫訪問API,欲知更多查看官方文檔:https://docs.djangoproject.com/en/2.0/topics/db/queries/

 

 

 建立一個APP(應用):

 咱們的APP就像當於咱們整個大項目的一部分:

那麼咱們有一種快速建立app的方式:python3 manage.py startapp app01

 建立好以後要進行的操做是要告訴Django,已經安裝的app都有哪一些:

那麼咱們以前對數據庫進行操做的時候咱們通常會寫一段代碼:

 
        import pymysql
        conn = pymysql.connect(
            host="127.0.0.1",
            port=3306,
            user="root",
            password="123",
            database="day62",
            charset="utf8"
        )
        cursor = conn.cursor()
        cursor.execute("slect * from user;")
        ret = cursor.fetchall()

可是這樣有點麻煩,由於咱們每次都要寫這麼多的代碼:

代碼操做數據庫的方式;
直接執行SQL
優勢:執行效率高
缺點:開發效率低
按照特定的語法寫,翻譯成SQL語句再去執行
優勢:開發效率高
缺點:執行效率低,你會忘記SQL語句

                                       在Django中ORM的使用:                              

咱們通常分爲四步:

第一步:告訴Django鏈接的數據庫名:

DATABASES = {
                'default': {
                    'ENGINE': 'django.db.backends.mysql',
                    'NAME': 'day62',
                    'HOST': '127.0.0.1',
                    'PORT': 3306,
                    'USER': 'root',
                    'PASSWORD': '123',
                }
            }

 

第二步:告訴Django怎麼鏈接,Django默認使用MYSQLdb模塊鏈接數據庫,咱們要告訴Django使用pymysql模塊去鏈接數據庫:

在settings.py同目錄下的__init__.py文件中,指定使用pymysql模塊代替MySQLdb
                import pymysql
                pymysql.install_as_MySQLdb()

 

第三步:在app/models.py中定義咱們須要的類:

 

第四步:執行建立表的操做:咱們要明確一點,在Django中只能建立表,而不能建立數據庫。

1. python3 manage.py makemigrations    --> 將models.py的修改登記到小本本上 。登記到小本本上是什麼意思。
2. python3 manage.py migrate           --> 將修改翻譯成SQL語句,去數據庫執行 。 
在數據庫中生成一個表,與Django對應的表。

 

在上述四步準備好以後,那麼這個時候咱們就可使用咱們的Django中的ORM了:

第一步:

第二步:

第三步:

第四步:

相關文章
相關標籤/搜索