最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Django中ORM的用法

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Django中ORM的用法,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

為鞏留等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及鞏留網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站建設(shè)、網(wǎng)站制作、鞏留網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

ORM用法

1.字段類型:

屬性名 = models.字段類型,定義屬性時(shí)需要指定字段類型, 通過字段類型的參數(shù)指定選項(xiàng)。

屬性名

1.不允許使用python的保留關(guān)鍵字。

2.不允許使用MySQL的保留關(guān)鍵字。

3.不允許使用連續(xù)的下劃線,因?yàn)镈jango的查詢語法就是連續(xù)的下劃線。

AutoField:自動(dòng)增長的IntegerField, 不指定時(shí)Django會自動(dòng)創(chuàng)建屬性名為id的自動(dòng)增長屬性

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

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

CharField(max_length=20):字符串

參數(shù)max_length表示最大字符個(gè)數(shù)

TextFiled:大文本字段,一般超過4000個(gè)字符時(shí)使用

IntegerField:整數(shù)

DecimalField(max_digits=None, decimal_places=None):可以指定精度的十進(jìn)制浮點(diǎn)數(shù)

參數(shù)max_digits表示總位數(shù)

參數(shù)decimal_places表示小數(shù)位數(shù)

FloatField():浮點(diǎn)數(shù) 

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

參數(shù)auto_now表示每次保存對象時(shí),自動(dòng)設(shè)置該字段為當(dāng)前時(shí)間,用于"最后一次修改"的時(shí)間戳,它總是使用當(dāng)前日期,默認(rèn)為false。

參數(shù)auto_now_add表示當(dāng)對象第一次被創(chuàng)建時(shí)自動(dòng)設(shè)置當(dāng)前時(shí)間,用于創(chuàng)建的時(shí)間戳,它總是使用當(dāng)前日期,默認(rèn)為false。

參數(shù)auto_now_add和auto_now是相互排斥的,組合將會發(fā)生錯(cuò)誤。

TimeField:參數(shù)和DateField一樣。

DateTimeField:日期時(shí)間,參數(shù)同DateField。

 FileField:上傳文件字段,以二進(jìn)制的形式。

 ImageField:繼承于FileField,對上傳的內(nèi)容進(jìn)行校驗(yàn),確保是有效的圖片。

2.字段選項(xiàng):

null:如果為True,表示允許為空,默認(rèn)值是False。

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

對比:null是數(shù)據(jù)庫范疇的概念,blank是表單驗(yàn)證范疇的。

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

db_index:若值為True, 則在表中會為此字段創(chuàng)建索引,默認(rèn)值是False(為了優(yōu)化查詢速度 )。

default:默認(rèn)值,這可以是值或可調(diào)用對象。如果可調(diào)用,則每次創(chuàng)建新對象時(shí)都會調(diào)用它。

primary_key:若為True,則該字段會成為模型的主鍵字段,默認(rèn)值是False,一般作為AutoField的選項(xiàng)使用。

unique:如果為True, 這個(gè)字段在表中必須有唯一值,這個(gè)值不能重復(fù),默認(rèn)值是False。

關(guān)系型字段類型:關(guān)聯(lián)表中使用

注意:Django會自動(dòng)為表創(chuàng)建主鍵字段

如果使用選項(xiàng)設(shè)置某屬性為主鍵字段后,Django不會再創(chuàng)建自動(dòng)增長的主鍵字段

默認(rèn)創(chuàng)建的主鍵字段為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.關(guān)系字段類型

關(guān)系型數(shù)據(jù)庫的關(guān)系包括三種類型:

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

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

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

可以維護(hù)遞歸的關(guān)聯(lián)關(guān)系,使用self指定。

4.元選項(xiàng):

作用:修改數(shù)據(jù)庫表的默認(rèn)的名稱。

數(shù)據(jù)庫表的默認(rèn)名稱為 :

  應(yīng)用名_模型名
  例:Book應(yīng)用中定義BookInfo模型類
  Book_bookinfo

在模型類中定義元類Meta,用于設(shè)置元信息,使用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中。

用于模型對象和數(shù)據(jù)庫交互

是默認(rèn)自動(dòng)生成的屬性,但是可以自定義管理器對象。

自定義管理器對象后,Django不再生成默認(rèn)管理器對象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()

自定義管理器對象后,查詢數(shù)據(jù)時(shí)直接使用 Users 查詢,不再用默認(rèn)的objects。

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

Manager:管理器類

定義在from django.db import models中

管理器是Django的模型進(jìn)行數(shù)據(jù)庫操作的接口,Django應(yīng)用的每個(gè)模型都擁有至少一個(gè)管理器。

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

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

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

查詢時(shí),如果需要默認(rèn)過濾掉某些數(shù)據(jù),需要修改原始查詢集

2.新增管理器方法,如創(chuàng)建模型對象方法

當(dāng)模型屬性很多,多數(shù)字段為默認(rèn)值,每次只需要給少數(shù)屬性賦值時(shí),可以新增模型初始化方法

自定義管理器類: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):
          # 調(diào)用父類的成員語法為:super(子類型, self).成員
          # 默認(rèn)只查詢邏輯刪除字段為False的記錄
          return super(PeopleInfoManager, self).get_queryset().filter(isDelete=False)

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

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

 # models.py -- 自定義管理器類
  class UserInfoManager(models.Manager):
      # 自定義管理器類場景一:重寫get_queryset()方法
      def get_queryset(self):
          # 調(diào)用父類的成員語法為:super(子類型, self).成員
          # 默認(rèn)只查詢邏輯刪除字段為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('小杰'),
      ]
 
      # 構(gòu)造上下文
      context = {'Userlist':UserInfos}
 
      return render(request, 'User/userlist.html', context)

上述就是小編為大家分享的Django中ORM的用法了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享標(biāo)題:Django中ORM的用法
文章出自:http://fisionsoft.com.cn/article/jhhsge.html