最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django 單表操作實(shí)例詳解

 更新時(shí)間:2019年07月30日 14:36:58   作者:朱春雨  
這篇文章主要介紹了django 單表操作實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前面視圖層,模板層、路由層都寫(xiě)了大概,項(xiàng)目肯定是會(huì)和數(shù)據(jù)庫(kù)打交道,那就講講orm的單表查詢吧,直接寫(xiě)過(guò)一點(diǎn)點(diǎn),不太全面。

1、項(xiàng)目剛創(chuàng)建好,我們需要在settings里配置一下(用mysql數(shù)據(jù)庫(kù)),配置好了,再去app文件夾里的__init__配置下,其實(shí)在
哪個(gè)__init__配置都一樣,項(xiàng)目啟動(dòng)時(shí),首先是執(zhí)行__init__文件。下面直接貼代碼了。

setting文件里:

    DATABASES = {
    'default': {
      'ENGINE': 'django.db.backends.mysql',
      'HOST': '127.0.0.1',
      'PORT': 3306,
      'USER': 'root',
      'PASSWORD': '',
      'NAME': 'zhuyu',
      }
    }

__init__文件里:

    import pymysql
    pymysql.install_as_MySQLdb()
 
    #還是寫(xiě)寫(xiě)為什么吧,前面也寫(xiě)過(guò),再寫(xiě)一次。
    #首先django里mysql用的是MySQLdb,但是python3.x現(xiàn)在不支持MySQLdb了,所引在項(xiàng)目啟動(dòng)時(shí),將MySQLdb轉(zhuǎn)成pymysql
    #你是python2.x的可以不用寫(xiě)。

2、上面的配置配置好了,你就可以在models.py寫(xiě)orm了,我以Student為例

  class Student(model.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    age = models.CharField(max_length=32)
    balance = models.CharField(max_length=32)

3、數(shù)據(jù)庫(kù)遷移命令我就不寫(xiě)了,對(duì)數(shù)據(jù)庫(kù)操作無(wú)非就是增刪改查

增加:

方式一:

    ret = models.Student.object.create(name='zhuyu',age=21,balance='5000')
    #這里的ret是學(xué)生對(duì)象

方式二:

    zhanghao = models.Student(name='zhanghao',age=22,balance='4000)
    zhanghao.save()
    #先實(shí)例一個(gè)學(xué)生對(duì)象,再調(diào)用學(xué)生對(duì)象的方法,我們沒(méi)寫(xiě),調(diào)用的肯定是它基類(lèi)的方法。

修改:

方式一:

    ret = models.Student.object.filter(name='zhuyu').update(balance='9999)
    #返回值ret是對(duì)數(shù)據(jù)庫(kù)影響的行數(shù),
    #a = models.Student.object.filter(name='zhuyu'),a是一個(gè)queryset對(duì)象,所以u(píng)pdate是它的一個(gè)方法

方式二:

那么我Student對(duì)象有沒(méi)有update方法呢?

ret = models.Student.object.filter(name='zhuyu').first().update(balance='9999')

答案是會(huì)報(bào)錯(cuò)的!?。。?!,記住對(duì)象是沒(méi)有update方法的!?。。?!

那我對(duì)象怎么修改呢?

    ret = models.Student.object.filter(name='zhuyu').first()
    ret.balance = '8888'
    ret.save()
    #很簡(jiǎn)單,拿到修改對(duì)象,該屬性值,調(diào)用save()方法就行

刪除:

    ret = models.Student.object.filter(name='zhuyu')
    ret.delete()
    #這里的ret是queryset對(duì)象,調(diào)用的是它的delete方法

繼續(xù)上面的方法,對(duì)象有沒(méi)有delete方法呢?

    ret = models.Student.object.filter(name='zhuyu').first()
    ret.delete()
    #ret就是學(xué)生對(duì)象了,結(jié)果顯示能成功刪除!所以對(duì)象是有delete方法

增刪改上面就寫(xiě)完了,下面主要寫(xiě)寫(xiě)查詢吧。
1、all 查詢所有的結(jié)果:

    ret = models.Student.object.all()
    #ret是queryset對(duì)象


2、filter 篩選符合條件的:

    ret = models.Student.object.filter(name='zhuyu')
    # ret為queryset對(duì)象,姑且就是一個(gè)列表吧,裝著一個(gè)一個(gè)對(duì)象

3、first 查詢符合條件的第一個(gè)對(duì)象

    ret = models.Student.object.filter(balance='5000').first()
    # ret沒(méi)啥好說(shuō)的,一個(gè)對(duì)象,上面寫(xiě)了queryset對(duì)象姑且為列表,那么就可以索引取值了,
    # 我們?cè)倏磃irst()方法,它是取了queryset對(duì)象的索引0最為返回值,那么我也可以取
    ret = models.Student.object.filter(balance='5000')[0]
    # 注意:是可以通過(guò)索引取值,但是索引不能為負(fù)數(shù)!!

4、last 查詢符合條件的最后一個(gè)對(duì)象

    ret = models.Student.object.filter(balance='2000').last()
    # ret是學(xué)生對(duì)象,前面不是說(shuō)queryset對(duì)象是不能取負(fù)數(shù)嘛,那最后一個(gè)用-1
    # 肯定會(huì)報(bào)錯(cuò),那么last怎么實(shí)現(xiàn)的呢?
    # reverse查詢的結(jié)果進(jìn)行反轉(zhuǎn),看下面這句代碼
    ret = models.Student.object.filter(balance='2000').reverse().first()
    # last()原理就是這樣實(shí)現(xiàn)的

5、exclude 篩選出不符合條件的

    ret = models.Student.object.exclude(age=20)
    # ret 為queryset對(duì)象
    # exclude和filter一樣,可以跟多個(gè)條件,用逗號(hào)分開(kāi)
    ret = models.Student.object.exclude(age=20,name='zhuyu')
    # 查詢出不是name為朱宇,并且年齡為20的所有學(xué)生,相當(dāng)于and

6、count 查看queryset對(duì)象里的個(gè)數(shù)

    ret = models.Student.object.all()
    # ret為一個(gè)整型

7、order_by 排序

    # 以學(xué)生年齡從小到大排序
    ret = models.Student.object.order_by('age')
    # ret為queryset對(duì)象
    # 以學(xué)生年齡從大到小排序
    ret = models.Student.object.order_by('-age')
    # 我認(rèn)為實(shí)現(xiàn)方法為,先取出一個(gè)條件(也就是字符串),取索引0,看是否為'-',是的話
    # 取索引1到最后為條件,再轉(zhuǎn)換sql語(yǔ)句時(shí),ASC改為DESC,排序方式改變。

8、reverse 結(jié)果取反

    ret = models.Student.object.order_by('age').reverse()
    # ret為queryset對(duì)象,年齡從大到小排序。

9、exists 判斷queryset對(duì)象里是否有數(shù)據(jù)嘛

它的返回值就是True False

10、values和values_list

values:它是queryset對(duì)象的方法,它的返回值也是queryset對(duì)象,里面是一個(gè)大列表裝著一個(gè)一個(gè)字典

字典里的key就是values里的值

values_list:queryset對(duì)象的方法,它的返回值也是queryset對(duì)象,里面是一個(gè)大列表一個(gè)一個(gè)元組,元組的值就是values_list里所取到的值。

11、distinct 去重,不用多說(shuō)了,queryset對(duì)象的方法。

12、get 也是取出符合條件的一個(gè),但是那個(gè)條件必須是唯一的,必須存在的。

假如:取出叫zhuyu的學(xué)生,叫zhuyu的學(xué)生不止一個(gè),那么你用get就會(huì)報(bào)錯(cuò)取出叫dsb的學(xué)生,如果沒(méi)有,你用get就會(huì)出錯(cuò)。

上面就是一些單表查詢的方法,發(fā)現(xiàn)沒(méi)有,為何每個(gè)返回值,我都要寫(xiě)什么類(lèi)型,大多數(shù)就是queryset類(lèi)型,所以只要前面
是queryset對(duì)象,我們都可以用到它的方法,比如:取出學(xué)生balance為5000,且按照年齡從小到大排序。

下面寫(xiě)寫(xiě)基于雙下劃線的模糊查詢

  # 查詢學(xué)生年齡為12,16,13的學(xué)生
  models.Student.object.filter(age__in=[13,13,16])
 
  # 查詢學(xué)生年齡大于12的學(xué)生
  models.Student.object.filter(age__gt=12)
 
  # 查詢學(xué)生年齡小于12的學(xué)生
  models.Student.object.filter(age__lt=12)
 
  # 查詢學(xué)生年齡大于等于12的學(xué)生
  models.Student.object.filter(age__gte=12)
 
  # 查詢學(xué)生年齡小于等于12的學(xué)生
  models.Student.object.filter(age__lte=12)
 
  # 查詢學(xué)生名字中有宇的學(xué)生
  models.Student.object.filter(name__contains='宇')
 
  # 查詢學(xué)生名字以朱開(kāi)頭的學(xué)生
  models.Student.object.filter(name__startswith='朱')

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pandas實(shí)現(xiàn)兩個(gè)表的連接功能的方法詳解

    Pandas實(shí)現(xiàn)兩個(gè)表的連接功能的方法詳解

    這篇文章主要和大家一起說(shuō)說(shuō)pandas的兩個(gè)表的連接技能merge,也就是根據(jù)一個(gè)表的條件去匹配另一個(gè)表的內(nèi)容,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-09-09
  • Flask表單與表單驗(yàn)證實(shí)現(xiàn)流程介紹

    Flask表單與表單驗(yàn)證實(shí)現(xiàn)流程介紹

    這篇文章主要介紹了python中Flask?Web?表單的使用方法介紹,表單的操作是Web程序開(kāi)發(fā)中最核心的模塊之一,絕大多數(shù)的動(dòng)態(tài)交互功能都是通過(guò)表單的形式實(shí)現(xiàn)的。更多介紹需要的小伙伴可以參考下面文章內(nèi)容
    2022-09-09
  • Python日期的加減等操作的示例

    Python日期的加減等操作的示例

    本篇文章主要介紹了Python日期的加減等操作的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • python網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)知識(shí)點(diǎn)淺析

    python網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)知識(shí)點(diǎn)淺析

    在本篇內(nèi)容中小編給學(xué)習(xí)python的朋友們整理了關(guān)于網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)的相關(guān)知識(shí)點(diǎn)以及實(shí)例內(nèi)容,需要的朋友們參考下。
    2019-05-05
  • Python和php通信亂碼問(wèn)題解決方法

    Python和php通信亂碼問(wèn)題解決方法

    Python是在windows下的客戶端,用的是cp936編碼,php用的是utf-8編碼,如果單純使用urllib.urlencode編碼之后post發(fā)送的話,php接收過(guò)來(lái)的中文會(huì)是類(lèi)似\xb0\xe1這種形式的編碼
    2014-04-04
  • Django報(bào)錯(cuò)TemplateDoesNotExist的問(wèn)題及解決

    Django報(bào)錯(cuò)TemplateDoesNotExist的問(wèn)題及解決

    這篇文章主要介紹了Django報(bào)錯(cuò)TemplateDoesNotExist的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python之lxml安裝失敗的解決

    Python之lxml安裝失敗的解決

    這篇文章主要介紹了Python之lxml安裝失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 在python中畫(huà)正態(tài)分布圖像的實(shí)例

    在python中畫(huà)正態(tài)分布圖像的實(shí)例

    今天小編就為大家分享一篇在python中畫(huà)正態(tài)分布圖像的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • 使用PyInstaller庫(kù)把Python程序打包成exe

    使用PyInstaller庫(kù)把Python程序打包成exe

    這篇文章介紹了使用PyInstaller庫(kù)把Python程序打包成exe的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 基于Python實(shí)現(xiàn)文件的壓縮與解壓縮

    基于Python實(shí)現(xiàn)文件的壓縮與解壓縮

    在日常工作中,除了會(huì)涉及到使用Python處理文本文件,有時(shí)候還會(huì)涉及對(duì)壓縮文件的處理。本文為大家總結(jié)了利用Python可以實(shí)現(xiàn)的幾種文件壓縮與解壓縮實(shí)現(xiàn)代碼,需要的可以參考一下
    2022-03-03

最新評(píng)論

锡林浩特市| 彩票| 潞西市| 温州市| 佛教| 岚皋县| 阿鲁科尔沁旗| 阿城市| 镇江市| 孝义市| 怀来县| 宝坻区| 萨迦县| 平罗县| 乌什县| 拉孜县| 南阳市| 鄱阳县| 衡阳县| 民乐县| 焦作市| 呼和浩特市| 凤城市| 鹤壁市| 阿拉善右旗| 平泉县| 公主岭市| 茌平县| 蒙城县| 若尔盖县| 岑巩县| 通化市| 蒙阴县| 上高县| 陈巴尔虎旗| 灵宝市| 河源市| 修武县| 新源县| 女性| 乌拉特前旗|