程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Django-Models

編輯:Python
  • Django 對各種數據庫提供了很好的支持,Django為這些數據庫提供了統一的調用API,可以根據不同的業務需求選擇不同的數據庫。

如需了解更多,請訪問: https://www.emperinter.info/2022/05/29/django-models/

ORM

  • 概述
    • 對象-映射-模型
  • 任務
    • 根據對象的類型生成表結構
    • 將對象、列表的操作轉換為sql語句
    • 將SQL語句查詢的結果轉換為對象、列表
  • 優點
    • 極大的減輕了開發人員的工作量,不需要面對因數據庫的變更而修改代碼

流程

配置數據庫

  • __init__.py文件中添加選定的數據庫Package。
import pymysql
pymysql.version_info = (2,0,3,"final",0)
pymysql.install_as_MySQLdb()
  • settings.py文件中修改數據庫配置。
DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',
'NAME': 'sunck', # 數據庫名 
'USER': 'sunk', # 數據庫用戶名 
'PASSWORD': 'sunk', # 數據庫密碼 
'HOST': 'localhost', # 數據庫主機 
'PORT': '3306', # 數據庫端口 
}
}

在models.py 添加模型類

  • 一個模型類都在數據庫中對應一張表

定義模型

模型、屬性、表、字段間的關系

  • 一個模型類在數據庫中對應一張表
  • 模型類中定義的屬性,對應模型對照表中的字段

定義屬性

概述

  • Django根據屬性的類型確定以下信息
    • 當前選擇的數據庫支持字段的類型
    • 渲染管理表單時使用的默認html控件
    • 在管理站點最低限度的驗證
  • Django會為表增加自動增加的主鍵列,每個模型只能有一個主鍵列,如果使用選項設置某屬性為主鍵列後,則Django不會再生成默認的主鍵列。
  • 屬性命名限制
    • 不能是Python的保留關鍵字(遵循標識符命名規則)
    • 由於Django的查詢方式,不允許使用連續的下劃線

  • 定義屬性時,需要字段類型,字段類型被定義再django.db.modles.fields目錄下,為了方便使用,被導入到django.db.modles
  • 使用方式:
    • 導入from django.db import models
    • 通過modles.Field創建字段類型的對象,賦值給屬性

邏輯刪除

  • 對於重要數據都做邏輯刪除 ,不能做物理刪除,實現方法是定義isDelete屬性,類型為BooleanField,默認值為False

字段類型

字段類型說明AutoField一個根據實際ID自動增長的IntergerField,通常不指定,如果不指定一個主鍵字段將自動添加到模型中CharField(max_length=字符長度)字符串,默認的表單樣式是TextInputTextField大文本字段,一般超過4000字節使用,默認的表單控件是textAreaIntegerField整數DecimalFiled(max_digits=None,decimal_places=None)使用Python的Decimal實例表示的十進制浮點數,max_digits表示位數總數,decimal_places表示小數點後的數字位數。[[精確的浮點運算-Decimal]]FloatField用Python的Float實例來表示的浮點數BooleanFieldtrue/false字段,此字段的默認表單控制是CheckboxInputNullBolleanField支持null、true、false三種值DateField([auto_now=False,auto_now_add=False])使用Python的Datetime.date實例表示的日期,auto_now表示每次保存對象是,自動設置該字段為當前時間,用於“最後一次修改”的時間戳,它總是使用當前日期,默認為False。auto_now_add表示當對象第一次被創建時自動設置當前時間,用於創建的時間戳,它總是使用當前時間,默認為False。說明:該字段默認對於表單控件是一個TextField,在管理員站點添加了一個JavaScript寫的日歷控件,和一個“Today”的快捷按鈕,包含了一個額外的invalid_date錯誤消息鍵。注意:auto_now_add、auto_now、defalut這些設置是相互排斥的,他們之間的任何組合將會發生錯誤的結果。TimeField使用Python的datetime,datetime實例表示的日期和時間,參數同DateFieldFiledField一個上傳文件的字段ImageField繼承了FileField的所有屬性和方法,但對上傳的對象進行校驗,確保它是一個有效的image

字段選項(字段參數)

  • 概述:
    • 通過字段選項,可以實現對字段的約束
    • 在字段對象是通過關鍵字參數指定
  • null
    • 如果為True,Django將空值已NULL存儲到數據庫中,默認是False
  • blanke
    • 如果為True,則該字段允許為空白,默認值是False
    • 注意:
      • null是數據庫范疇的概念,blank是表單驗證范疇的
  • db_column
    • 字段的名稱,如未指定,則使用屬性的名稱
  • db_index
    • 若值為True,則在表中會為此字段創建索引
  • defalut
    • 默認值
  • primary_key
    • 若為True,則該字段會成為模型的主鍵字段
  • unique
    • 若為True,則該字段的值必須唯一

關系

  • 分類
    • ForeignKey:一對多,將字段定義在多的端中
    • ManyToManyField: 多對多,將字段定義在兩端中
    • OneToOneField:一對一,將字段定義在任意一端中。
  • 用一訪問多:
    • 格式: 對象.模型類小寫_set
    • 示例:grade.students_set
  • 用一訪問一:
    • 格式:對象.模型類小寫
    • 示例:grade.students
  • 訪問id:
    • 格式:對象.屬性_id
    • 示例:student.sgrade_id

創建模型類

如需了解更多,請訪問: https://www.emperinter.info/2022/05/29/django-models/


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved