日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python框架-Django-02-相知.模型

發(fā)布時間:2023/12/29 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python框架-Django-02-相知.模型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
ex:from django.db import models ''' 功能:1.創(chuàng)建表2.提供模型類,用于上層進行crud操作 ''' # Create your models here. #需要繼承該類,才能完成ORM ''' #自定義管理器*1.更改默認查詢集的查詢結(jié)果*2.快速插入 ''' class BookInfoManager(models.Manager):def get_queryset(self):return super(BookInfoManager,self).get_queryset().filter(isDelete=0)def create(self,btitle,bpub_date):b = BookInfo()b.btitle = btitleb.bpub_date = bpub_dateb.bread = 0b.bcommet = 0b.isDelete = 0return b '''@attention: 這里的create方法是用于快速插入的。 ''' class BookInfo(models.Model):btitle = models.CharField(max_length=20)bpub_date = models.DateTimeField(db_column='pub_date')bread = models.IntegerField(default=0)bcommet = models.IntegerField(default=0)isDelete = models.BooleanField(default=0)class Meta():db_table = 'bookinfo'#BookInfo.objects.all()的返回值:def __str__(self):return self.btitlebooks1 = models.Manager()books2 = BookInfoManager()@classmethoddef create(cls,btitle,bpub_date):b = BookInfo()b.btitle = btitleb.bpub_date = bpub_dateb.bread = 0b.bcommet = 0b.isDelete = 0return bclass HeroInfo(models.Model):hname = models.CharField(max_length=20)hgender = models.BooleanField(default=0)hcontent = models.CharField(max_length=1000) isDelete = models.BooleanField(default=0)#引用外鍵,重點記憶hbook = models.ForeignKey(BookInfo)class Meta():db_table = 'heroinfo'#def __str__(self):# return self.hname我把整個models拿過來進行如下說明: 1.定義模型類時后一定要集成models.Model: ex:class demo(models.Model): 2.字段類型的說明:models.CharField(max_length=20) #定義字符最大長度models.DateTimeField(db_column='pub_date') #定義該域在數(shù)據(jù)庫的名字models.IntegerField(default=0) #默認值models.BooleanField(default=0) #默認值注:如果需要更改表結(jié)構(gòu),要做遷移。遷移里面有文件可能會報遷移不成功。 3.元選項在定義的模型類中繼續(xù)定義類,這個類的名字就是這個,不能變clasee Meta():db_table='bookinfo' #定義表的名字ording = ['id','name'] #按照域排序ording = ['-id'] #降序4.自定義管理器作用有二:1.自定義查詢集2.快速插入經(jīng)常訪問的BookInfo.objescts.all(),這里的objects就是默認的管理器,可以通過繼承它,構(gòu)造自定義的管理器ex:#定義管理器類class BookInfoManager(models.Manager):def get_queryset(self):return super(BookInfoManager,self).get_queryset().filter(isDelete=0)def create(self,btitle,bpub_date):b = BookInfo()b.btitle = btitleb.bpub_date = bpub_dateb.bread = 0b.bcommet = 0b.isDelete = 0return b在BookInfo類中加入如下語句:books1 = models.Manager()books2 = BookInfoManager()這樣我們就可以使用BookInfo.books1/books2.all()訪問數(shù)據(jù)。注:管理器是模型類的屬性,用于將對象與數(shù)據(jù)庫數(shù)據(jù)表映射。每個模型類中至少有一個管理器。 5.查詢 #返回集合的方法:all() #獲取所有數(shù)據(jù)filter() #表示篩選的查詢exclude() #與filter()相對,不滿足條件的數(shù)據(jù)。order_by()values() 對象的值,以對象-字典 最后構(gòu)成列表的方式返回數(shù)據(jù)本身。 #返回單個值的方法:get() #括號中可加條件,沒有的話報Doesnotexist異常count()first() #括號中可加條件last() #括號中可加條件exists() #不加參數(shù) #限制查詢集ex:BookInfo.books1.all()[0:5]注:不能為負 #查詢集緩存惰性查詢:不迭代的話,不會去數(shù)據(jù)庫拿數(shù)據(jù)。ex:res = BookInfo.books1.all()for each in res[0:10]:do something等我再去for each in res[0:10]的時候,他已經(jīng)給你緩存好了。什么情況不緩存:ex:res = BookInfo.books1.all()for each in res[0:10]:do something我再去:for each in res[15:20]時,重新去查詢數(shù)據(jù)庫,但不會被緩存。 #字段查詢1.相等:exact,一般省略不寫Ex:<QuerySet [<BookInfo: 風(fēng)云>, <BookInfo: 天龍八部1>]>BookInfo.books1.filter(isDelete__exact=0)Out[22]: <QuerySet [<BookInfo: 風(fēng)云>, <BookInfo: 天龍八部1>]>2.包含:containsEx:BookInfo.books1.filter(btitle__contains='人')Out[23]: <QuerySet [<BookInfo: 人名的名義>]>3.開頭/結(jié)尾:startswith/endswithEx:<QuerySet [<BookInfo: 人名的名義>]>BookInfo.books1.filter(btitle__endswith='人')Out[25]: <QuerySet []>BookInfo.books1.filter(btitle__endswith='云')Out[26]: <QuerySet [<BookInfo: 風(fēng)云>]>4.關(guān)聯(lián)查詢:相當(dāng)于inner join,這個比較高端Ex:BookInfo.books1.filter(heroinfo__hname__contains='聶風(fēng)')Out[27]: <QuerySet [<BookInfo: 風(fēng)云>]>說明:查詢的結(jié)果是關(guān)聯(lián)外鍵的name域包含’聶風(fēng)‘的書。 #聚合/F/Q對象 1.聚合函數(shù):Sum(),Max(),Min(),Avg(),Count()ex:BookInfo.books1.aggregate(Max('id'))Out[32]: {'id__max': 3}BookInfo.books1.aggregate(Min('id'))Out[33]: {'id__min': 1}from django.db.models import Max,Min,SumBookInfo.books1.aggregate(Sum('id'))Out[35]: {'id__sum': Decimal('6')}注:count就不要用聚合了,直接count() 2.F對象:比較同一個表中不同域的大小關(guān)系ex:from django.db.models import Max,Min,F,QBookInfo.books1.filter(id__gte=F('bread'))Out[39]: <QuerySet [<BookInfo: 人名的名義>, <BookInfo: 天龍八部1>]>BookInfo.books1.filter(pk__gte=F('bread'))Out[40]: <QuerySet [<BookInfo: 人名的名義>, <BookInfo: 天龍八部1>]>3.與/或關(guān)系:與ex:<QuerySet [<BookInfo: 人名的名義>, <BookInfo: 天龍八部1>]>BookInfo.books1.filter(id__gte=2,btitle__contains='天')Out[46]: <QuerySet [<BookInfo: 天龍八部1>]>或語法格式如下:ex: BookInfo.books1.filter(Q(id__gte=2)|Q(btitle__contains='風(fēng)'))Out[48]: <QuerySet [<BookInfo: 風(fēng)云>, <BookInfo: 人名的名義>, <BookInfo: 天龍八部1>]>

2019/03/26

一些補充

一、django
1.django values()和value_list()區(qū)別
?? ?vlaues -
?? ??? ?單條記錄 - <class 'dict'>
?? ??? ?多條記錄 - <class 'django.db.models.query.QuerySet'>
?? ?vlaues_list -
?? ??? ?單條記錄 - <class 'tuple'>
?? ??? ?多條記錄 - <class 'django.db.models.query.QuerySet'>
?? ?vlaues_list 返回的是元組列表,默認flat=False,設(shè)置flat=True,就是咱們需要的列表格式了。
?? ?上面的flat=True,是以值的數(shù)據(jù)結(jié)構(gòu)返回,所有注定了flat=True的時候只能指定返回單個字段,如果傳遞多個字段會出錯
?? ??? ?
2.django 查詢
?? ?#只記錄不常用的,實用的
?? ?reverse():倒序
?? ?distinct():去重(只要結(jié)果里面有重復(fù)的)
3.django 更新
?? ?第二種方式修改不能用get的原因是:update是QuerySet對象的方法,get返回的是一個model對象,它沒有update方法,而filter返回的是QuerySet對象;
?? ?模型的save()方法,會更新一行里的所有列,而某些情況下,我們只需要更新行里的某幾列;?? ?#速度慢
?? ?update()返回的是一個整數(shù),表示影響記錄的條數(shù)

總結(jié)

以上是生活随笔為你收集整理的python框架-Django-02-相知.模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。