中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django中ORM的用法

發布時間:2020-08-26 15:31:13 來源:億速云 閱讀:256 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關Django中ORM的用法,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

ORM用法

1.字段類型:

屬性名 = models.字段類型,定義屬性時需要指定字段類型, 通過字段類型的參數指定選項。

屬性名

1.不允許使用python的保留關鍵字。

2.不允許使用mysql的保留關鍵字。

3.不允許使用連續的下劃線,因為Django的查詢語法就是連續的下劃線。

AutoField:自動增長的IntegerField, 不指定時Django會自動創建屬性名為id的自動增長屬性

BooleanField:布爾字段,值為True或False

NullBooleanField:支持Null、True、False三種值

CharField(max_length=20):字符串

參數max_length表示最大字符個數

TextFiled:大文本字段,一般超過4000個字符時使用

IntegerField:整數

DecimalField(max_digits=None, decimal_places=None):可以指定精度的十進制浮點數

參數max_digits表示總位數

參數decimal_places表示小數位數

FloatField():浮點數 

DateField[auto_now=False, auto_now_add=False]):日期

參數auto_now表示每次保存對象時,自動設置該字段為當前時間,用于"最后一次修改"的時間戳,它總是使用當前日期,默認為false。

參數auto_now_add表示當對象第一次被創建時自動設置當前時間,用于創建的時間戳,它總是使用當前日期,默認為false。

參數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤。

TimeField:參數和DateField一樣。

DateTimeField:日期時間,參數同DateField。

 FileField:上傳文件字段,以二進制的形式。

 ImageField:繼承于FileField,對上傳的內容進行校驗,確保是有效的圖片。

2.字段選項:

null:如果為True,表示允許為空,默認值是False。

blank:如果為True,則該字段允許為空白,默認值是False。

對比:null是數據庫范疇的概念,blank是表單驗證范疇的。

db_column:字段的名稱,如果未指定,則使用屬性的名稱(只限于數據庫表中的名字,操作數據庫還是類屬性的名字)。

db_index:若值為True, 則在表中會為此字段創建索引,默認值是False(為了優化查詢速度 )。

default:默認值,這可以是值或可調用對象。如果可調用,則每次創建新對象時都會調用它。

primary_key:若為True,則該字段會成為模型的主鍵字段,默認值是False,一般作為AutoField的選項使用。

unique:如果為True, 這個字段在表中必須有唯一值,這個值不能重復,默認值是False。

關系型字段類型:關聯表中使用

注意:Django會自動為表創建主鍵字段

如果使用選項設置某屬性為主鍵字段后,Django不會再創建自動增長的主鍵字段

默認創建的主鍵字段為id,可以使用pk代替,pk全拼為primary key。

class PeopleInfo(models.Model):
    name = models.CharField(max_length=20) #人物姓名
    gender = models.BooleanField(default=True) #人物性別
    description = models.CharField(max_length=20) #人物描述
    isDelete = models.BooleanField(default=False) #邏輯刪除
    book = models.ForeignKey(BookInfo) # 外鍵約束,人物屬于哪本書
    pub_date = models.DateField(null=True) #日期
    readcount = models.IntegerField(default=0) #閱讀量
    commentcount = models.IntegerField(default=0) #評論量
    isDelete = models.BooleanField(default=False) #邏輯刪除
 
    # 元類信息 : 修改表名
    class Meta:
        db_table = 'peopleinfo'

3.關系字段類型

關系型數據庫的關系包括三種類型:

ForeignKey:一對多,將字段定義在多的一端中。

ManyToManyField:多對多,將字段定義在任意一端中。

OneToOneField:一對一,將字段定義在任意一端中。

可以維護遞歸的關聯關系,使用self指定。

4.元選項:

作用:修改數據庫表的默認的名稱。

數據庫表的默認名稱為 :

  應用名_模型名
  例:Book應用中定義BookInfo模型類
  Book_bookinfo

在模型類中定義元類Meta,用于設置元信息,使用db_table自定義表的名字

  # 書籍信息模型
  class BookInfo(models.Model):
      name = models.CharField(max_length=20) #圖書名稱
 
      class Meta: #元信息類
          db_table = 'bookinfo' #自定義表的名字

5.模型成員

objects : 管理器對象

是Manager類型的對象,定義在from django.db import models中。

用于模型對象和數據庫交互

是默認自動生成的屬性,但是可以自定義管理器對象。

自定義管理器對象后,Django不再生成默認管理器對象objects。

自定義管理器對象

為模型類UserInfo自定義管理器對象Users。

  # 用戶信息模型
  class UserInfo(models.Model):
      name = models.CharField(max_length=20) #名稱
      pub_date = models.DateField(null=True) #日期
      readcount = models.IntegerField(default=0) #閱讀量
      commentcount = models.IntegerField(default=0) #評論量
      isDelete = models.BooleanField(default=False) #邏輯刪除
 
      #元類信息 : 修改表名
      class Meta:
          db_table = 'Userinfo'
 
      # 自定義管理器對象
      Users = models.Manager()

自定義管理器對象后,查詢數據時直接使用 Users 查詢,不再用默認的objects。

# 書籍列表信息視圖
  def userList(request):
      # 查詢數據庫用戶信息 : 默認管理器對象--objects
      # UserInfos = UserInfo.objects.all()
 
      # 查詢數據庫用戶信息 : 自定義管理器對象--Users
     UserInfos = UserInfo.Users.all()
 
      # 構造上下文
      context = {'Userlist':UserInfos}
 
      return render(request, 'User/Userlist.html', context)

Manager:管理器類

定義在from django.db import models中

管理器是Django的模型進行數據庫操作的接口,Django應用的每個模型都擁有至少一個管理器。

Django模型支持自定義管理器類,繼承自models.Manager。

自定義管理器類主要用于兩種情況:

1.修改原始查詢集,重寫get_queryset()方法

查詢時,如果需要默認過濾掉某些數據,需要修改原始查詢集

2.新增管理器方法,如創建模型對象方法

當模型屬性很多,多數字段為默認值,每次只需要給少數屬性賦值時,可以新增模型初始化方法

自定義管理器類:1.修改原始查詢集

把peopleinfo表中的isDelete字段修改為True(updata peopleinfo set isDelete=1 where id=4),但是邏輯刪除字段為True的那條記錄依然會被查詢出來,這里的解決辦法是自定義管理器類,重寫get_queryset()方法。

  from django.db import models
 
  # 自定義管理器類
  class PeopleInfoManager(models.Manager):
      # 自定義管理器類場景一:重寫get_queryset()方法
      def get_queryset(self):
          # 調用父類的成員語法為:super(子類型, self).成員
          # 默認只查詢邏輯刪除字段為False的記錄
          return super(PeopleInfoManager, self).get_queryset().filter(isDelete=False)

自定義管理器類:2.新增管理器方法

新增管理器初始化模型對象方法:只有name屬性需要賦值,其他的字段都是默認值.

 # models.py -- 自定義管理器類
  class UserInfoManager(models.Manager):
      # 自定義管理器類場景一:重寫get_queryset()方法
      def get_queryset(self):
          # 調用父類的成員語法為:super(子類型, self).成員
          # 默認只查詢邏輯刪除字段為False的記錄
          return super(UserInfoManager, self).get_queryset().filter(isDelete=False)
 
      # 初始化模型對象方法
      def create(self, name):
          user = UserInfo()
          user.name = name
          user.pub_date = '1989-11-11'
          user.readcount = 0
          user.commentcount = 0
          user.isDelete = False
          return user
  # view.py -- User列表信息視圖
  def UserList(request):
 
      # 初始化模型對象:自定義管理器類后
      UserInfos = [
          UserInfo.user.create('小明'),
          UserInfo.user.create('小杰'),
      ]
 
      # 構造上下文
      context = {'Userlist':UserInfos}
 
      return render(request, 'User/userlist.html', context)

上述就是小編為大家分享的Django中ORM的用法了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

松桃| 车险| 凤凰县| 罗城| 靖远县| 错那县| 许昌市| 闸北区| 石阡县| 万年县| 北安市| 高州市| 嵊泗县| 南乐县| 罗定市| 昭觉县| 苗栗县| 新河县| 牡丹江市| 来凤县| 桃江县| 沾益县| 陆川县| 儋州市| 周宁县| 满洲里市| 闵行区| 东海县| 临漳县| 合江县| 阜宁县| 旬阳县| 胶州市| 思茅市| 林州市| 遵化市| 栾川县| 吉木乃县| 彭泽县| 台南县| 壶关县|