天天看點

Django-ORM資料庫操作

背景

Django架構功能齊全自帶資料庫操作功能,由于工作中設計巨量的api接口,需要一個很好的web後端服務架構,Django給了莫大的幫助。本文主要介紹Django的ORM架構

我們一般對資料庫的使用的認識是:

  • 建立資料庫,設計表結構和字段
  • 使用 MySQLdb 來連接配接資料庫,并編寫資料通路層代碼
  • 業務邏輯層去調用資料通路層執行資料庫操作

ORM是什麼?

ORM:Object Relational Mapping(關系對象映射),在django中,根據代碼中的類自動生成資料庫的表也叫--code first。

  • 類名對應------》資料庫中的表名
  • 類屬性對應---------》資料庫裡的字段
  • 類執行個體對應---------》資料庫表裡的一行資料
  • obj.id obj.name.....類執行個體對象的屬性

Django ORM的優勢:

Django的orm操作本質上會根據對接的資料庫引擎,翻譯成對應的sql語句;所有使用Django開發的項目無需關心程式底層使用的是MySQL、Oracle、sqlite....,如果資料庫遷移,隻需要更換Django的資料庫引擎即可。

總的來說,Django的ORM 在設計初已經考慮了大量web設計中資料庫操作的共有需求,配置好資料庫後,就可以像使用變量模型一樣操作資料庫中資料。

一、資料庫配置(MySQL)

1、建立資料庫 (注意設定 資料的字元編碼)

由于Django自帶的orm是data_first類型的ORM,使用前必須先建立資料庫

2、修改project中的settings.py檔案中設定 連接配接 MySQL資料庫(Django預設使用的是sqllite資料庫)

DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'you mysql db name ',
    'USER': 'user name',
    'PASSWORD': 'password',
    'HOST': 'your mydql db host',
    'PORT': 'your mysql db port',
    }
}           

擴充:檢視orm操作執行的原生SQL語句,在project中的settings.py檔案增加。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}           

3、由于Django2.X後隻支援python3,而目前MySQLdb對python3沒有支援,是以需要使用pymysql,在django項目中修改project 中的__init__py 檔案設定 Django預設連接配接MySQL的方式

import pymysql
pymysql.install_as_MySQLdb()           

4、setings檔案注冊APP

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
   
]           

注冊APP後,Django會根據APP的名稱等生成并使用表/庫。Django中資料庫必須有非空主鍵,而且如果沒有聲明,所有的字段都會預設設計成非空。

  1. 按照規則在models.py子產品中設計表。
  2. 資料遷移操作。
python manage.py makemigrations  #根據app下的migrations目錄中的記錄,檢測目前model層代碼是否發生變化?
python manage.py migrate         #把orm代碼轉換成sql語句去資料庫執行
python manage.py migrate --fake    #隻記錄變化,不送出資料庫操作           

注:由于所有字段都預設是非空,是以在增加字段時會報錯,

Django-ORM資料庫操作

解決辦法是增加:null=Ture,聲明。