欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

django 單表操作實例詳解

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

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

1、項目剛創(chuàng)建好,我們需要在settings里配置一下(用mysql數(shù)據(jù)庫),配置好了,再去app文件夾里的__init__配置下,其實在
哪個__init__配置都一樣,項目啟動時,首先是執(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()
 
    #還是寫寫為什么吧,前面也寫過,再寫一次。
    #首先django里mysql用的是MySQLdb,但是python3.x現(xiàn)在不支持MySQLdb了,所引在項目啟動時,將MySQLdb轉(zhuǎn)成pymysql
    #你是python2.x的可以不用寫。

2、上面的配置配置好了,你就可以在models.py寫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ù)庫遷移命令我就不寫了,對數(shù)據(jù)庫操作無非就是增刪改查

增加:

方式一:

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

方式二:

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

修改:

方式一:

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

方式二:

那么我Student對象有沒有update方法呢?

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

答案是會報錯的?。。。?!,記住對象是沒有update方法的?。。。?!

那我對象怎么修改呢?

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

刪除:

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

繼續(xù)上面的方法,對象有沒有delete方法呢?

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

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

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


2、filter 篩選符合條件的:

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

3、first 查詢符合條件的第一個對象

    ret = models.Student.object.filter(balance='5000').first()
    # ret沒啥好說的,一個對象,上面寫了queryset對象姑且為列表,那么就可以索引取值了,
    # 我們再看first()方法,它是取了queryset對象的索引0最為返回值,那么我也可以取
    ret = models.Student.object.filter(balance='5000')[0]
    # 注意:是可以通過索引取值,但是索引不能為負數(shù)??!

4、last 查詢符合條件的最后一個對象

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

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

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

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

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

7、order_by 排序

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

8、reverse 結(jié)果取反

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

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

它的返回值就是True False

10、values和values_list

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

字典里的key就是values里的值

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

11、distinct 去重,不用多說了,queryset對象的方法。

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

假如:取出叫zhuyu的學(xué)生,叫zhuyu的學(xué)生不止一個,那么你用get就會報錯取出叫dsb的學(xué)生,如果沒有,你用get就會出錯。

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

下面寫寫基于雙下劃線的模糊查詢

  # 查詢學(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é)生名字以朱開頭的學(xué)生
  models.Student.object.filter(name__startswith='朱')

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

相關(guān)文章

  • Python如何將控制臺輸出另存為日志文件

    Python如何將控制臺輸出另存為日志文件

    這篇文章主要介紹了Python如何將控制臺輸出另存為日志文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python中的hashlib模塊解析

    Python中的hashlib模塊解析

    這篇文章主要介紹了Python中的hashlib模塊解析,hashlib是一個提供字符加密功能的模塊,包含MD5和SHA的加密算法,具體支持md5,sha1, sha224, sha256, sha384, sha512等算法, 該模塊在用戶登錄認證方面應(yīng)用廣泛,對文本加密也很常見,需要的朋友可以參考下
    2023-09-09
  • pycharm之英文輸入法變成全角字符無法輸入問題

    pycharm之英文輸入法變成全角字符無法輸入問題

    這篇文章主要介紹了pycharm之英文輸入法變成全角字符無法輸入問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • python出現(xiàn)

    python出現(xiàn)"IndentationError: unexpected indent"錯誤解決辦法

    這篇文章主要介紹了python出現(xiàn)"IndentationError: unexpected indent"錯誤解決辦法的相關(guān)資料,希望通過本文能解決遇到這樣的問題,需要的朋友可以參考下
    2017-10-10
  • 淺談Pycharm最有必要改的幾個默認設(shè)置項

    淺談Pycharm最有必要改的幾個默認設(shè)置項

    今天小編就為大家分享一篇淺談Pycharm最有必要改的幾個默認設(shè)置項,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • django如何設(shè)置csrf_token

    django如何設(shè)置csrf_token

    這篇文章主要介紹了django如何設(shè)置csrf_token問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python中的if、else、elif語句用法簡明講解

    Python中的if、else、elif語句用法簡明講解

    這篇文章主要介紹了Python中的if、else、elif語句的用法講解,條件判斷語句是程序中流程控制的基礎(chǔ)辦法之一,需要的朋友可以參考下
    2016-03-03
  • Python實現(xiàn)學(xué)生成績管理系統(tǒng)

    Python實現(xiàn)學(xué)生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了Python實現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python sqlite3事務(wù)處理方法實例分析

    Python sqlite3事務(wù)處理方法實例分析

    這篇文章主要介紹了Python sqlite3事務(wù)處理方法,結(jié)合具體實例形式分析了Python針對sqlite3事務(wù)處理的操作技巧,代碼中包含詳盡的注釋,需要的朋友可以參考下
    2017-06-06
  • Python實現(xiàn)郵件發(fā)送功能的示例詳解

    Python實現(xiàn)郵件發(fā)送功能的示例詳解

    Python對SMTP支持有smtplib和email兩個模塊,email負責(zé)構(gòu)造郵件,smtplib負責(zé)發(fā)送郵件。本文將以qq郵箱為例,實現(xiàn)自己給自己發(fā)送郵件的功能,感興趣的可以了解一下
    2022-11-11

最新評論