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

Django中g(shù)et()與filter()的區(qū)別及常見(jiàn)錯(cuò)誤

 更新時(shí)間:2025年11月02日 15:02:27   作者:言之。  
Django中g(shù)et()和filter()是數(shù)據(jù)查詢的核心方法,本文就來(lái)介紹一下Django中g(shù)et()與filter()的區(qū)別及常見(jiàn)錯(cuò)誤,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在 Django 中,get()filter() 是 QuerySet API 中用于檢索數(shù)據(jù)的兩個(gè)核心方法,它們的功能和使用場(chǎng)景有明顯區(qū)別。以下是詳細(xì)對(duì)比:

1. 核心區(qū)別

特性get()filter()
返回值單個(gè)對(duì)象(模型實(shí)例)查詢集(QuerySet,可迭代)
數(shù)量限制必須精確匹配1個(gè)對(duì)象可以匹配0個(gè)、1個(gè)或多個(gè)對(duì)象
對(duì)象不存在時(shí)拋出 DoesNotExist 異常返回空查詢集(不報(bào)錯(cuò))
多對(duì)象匹配時(shí)拋出 MultipleObjectsReturned 異常返回包含多個(gè)對(duì)象的查詢集
鏈?zhǔn)秸{(diào)用不支持(返回的是模型實(shí)例)支持(可繼續(xù)添加過(guò)濾條件)

2. 語(yǔ)法與示例

get()的用法

# 獲取 ID 為 1 的書(shū)(必須存在且唯一)
book = Book.objects.get(id=1)

# 等價(jià)的手動(dòng)異常處理
try:
    book = Book.objects.get(id=1)
except Book.DoesNotExist:
    # 處理不存在的情況
    pass
except Book.MultipleObjectsReturned:
    # 處理多對(duì)象匹配的情況
    pass

filter()的用法

# 獲取所有已發(fā)布的書(shū)(可能有0本或多本)
books = Book.objects.filter(status='published')

# 鏈?zhǔn)竭^(guò)濾:獲取已發(fā)布且價(jià)格大于 50 的書(shū)
books = Book.objects.filter(status='published').filter(price__gt=50)

# 等價(jià)的單語(yǔ)句寫(xiě)法
books = Book.objects.filter(status='published', price__gt=50)

# 獲取第一本書(shū)或 None(推薦替代 get() 的安全寫(xiě)法)
first_book = books.first()  # 等價(jià)于 books[0] if books else None

3. 性能對(duì)比

  • get():直接查詢單條記錄,生成的 SQL 類(lèi)似 SELECT ... WHERE ... LIMIT 1,理論上更高效。
  • filter().first():生成的 SQL 是 SELECT ... WHERE ... LIMIT 1,與 get() 幾乎相同,但多了一步 Python 對(duì)象轉(zhuǎn)換,性能損耗可忽略不計(jì)。

注意:在查詢條件唯一(如主鍵查詢)時(shí),兩者性能接近;但 filter().first() 更安全。

4. 適用場(chǎng)景

推薦使用get()的場(chǎng)景

  • 查詢條件唯一(如通過(guò)主鍵或唯一鍵查詢)。
  • 對(duì)象必須存在,否則視為程序錯(cuò)誤(如配置項(xiàng)、固定ID的系統(tǒng)數(shù)據(jù))。
  • 示例
    user = User.objects.get(username='admin')  # 管理員用戶必須存在
    

推薦使用filter()的場(chǎng)景

  • 查詢條件不唯一(如按類(lèi)別篩選商品)。
  • 結(jié)果可能為空(如搜索功能)。
  • 需要鏈?zhǔn)讲樵?/strong>(如分頁(yè)、排序、多條件組合)。
  • 示例
    # 搜索功能(結(jié)果可能為空)
    books = Book.objects.filter(title__icontains='python')
    
    # 分頁(yè)查詢
    books = Book.objects.filter(category='tech').order_by('-pub_date')[:10]
    

5. 常見(jiàn)錯(cuò)誤案例

錯(cuò)誤使用get()的場(chǎng)景

# 錯(cuò)誤:title 可能不唯一,導(dǎo)致 MultipleObjectsReturned
book = Book.objects.get(title="Python")

# 正確:使用 filter().first()
book = Book.objects.filter(title="Python").first()

低效的filter()使用

# 低效:兩次數(shù)據(jù)庫(kù)查詢
if Book.objects.filter(id=1).exists():
    book = Book.objects.get(id=1)  # 重復(fù)查詢

# 高效:?jiǎn)未尾樵?
book = Book.objects.filter(id=1).first()

6. 總結(jié)

場(chǎng)景方法
通過(guò)主鍵/唯一鍵獲取單個(gè)對(duì)象get()(需確保存在)
安全獲取單個(gè)對(duì)象(不存在時(shí)返回 None)filter().first()
查詢可能存在多個(gè)結(jié)果或空結(jié)果filter()
需要鏈?zhǔn)讲樵儯ㄈ绶猪?yè)、排序)filter()

建議:優(yōu)先使用 filter().first() 替代 get(),除非你能絕對(duì)保證查詢條件的唯一性和存在性。

到此這篇關(guān)于Django中g(shù)et()與filter()的區(qū)別及常見(jiàn)錯(cuò)誤的文章就介紹到這了,更多相關(guān)Django中g(shù)et()與filter()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python函數(shù)默認(rèn)返回None的原因及分析

    Python函數(shù)默認(rèn)返回None的原因及分析

    Python函數(shù)默認(rèn)返回None是因?yàn)樵谡Z(yǔ)法層面,解釋器會(huì)主動(dòng)地為沒(méi)有return語(yǔ)句的函數(shù)添加一個(gè)返回邏輯,返回值為None
    2024-11-11
  • python爬取網(wǎng)站數(shù)據(jù)保存使用的方法

    python爬取網(wǎng)站數(shù)據(jù)保存使用的方法

    這篇文章主要介紹了使用Python從網(wǎng)上爬取特定屬性數(shù)據(jù)保存的方法,其中解決了編碼問(wèn)題和如何使用正則匹配數(shù)據(jù)的方法,詳情看下文
    2013-11-11
  • Python 十六進(jìn)制整數(shù)與ASCii編碼字符串相互轉(zhuǎn)換方法

    Python 十六進(jìn)制整數(shù)與ASCii編碼字符串相互轉(zhuǎn)換方法

    今天小編就為大家分享一篇Python 十六進(jìn)制整數(shù)與ASCii編碼字符串相互轉(zhuǎn)換方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 詳解Python中的Numpy、SciPy、MatPlotLib安裝與配置

    詳解Python中的Numpy、SciPy、MatPlotLib安裝與配置

    這篇文章主要介紹了詳解Python中的Numpy、SciPy、MatPlotLib安裝與配置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • python3 sqlite3限制條件查詢的操作

    python3 sqlite3限制條件查詢的操作

    這篇文章主要介紹了python3 sqlite3限制條件查詢的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Python遍歷指定文件夾下的所有文件名的方法小結(jié)

    Python遍歷指定文件夾下的所有文件名的方法小結(jié)

    當(dāng)需要遍歷指定文件夾下的所有文件名時(shí),Python提供了多種方法來(lái)實(shí)現(xiàn)這個(gè)任務(wù),本文將介紹如何使用Python來(lái)完成這一任務(wù),有需要的小伙伴可以參考下
    2024-01-01
  • python 爬取華為應(yīng)用市場(chǎng)評(píng)論

    python 爬取華為應(yīng)用市場(chǎng)評(píng)論

    項(xiàng)目需要爬取評(píng)論數(shù)據(jù),在此做一個(gè)記錄,這里爬取的是web端的數(shù)據(jù),以后可能會(huì)考慮爬取android app中的數(shù)據(jù)。
    2021-05-05
  • Python技巧匿名函數(shù)、回調(diào)函數(shù)和高階函數(shù)

    Python技巧匿名函數(shù)、回調(diào)函數(shù)和高階函數(shù)

    本文分享的是Python技巧匿名函數(shù)、回調(diào)函數(shù)和高階函數(shù),我們?cè)赑ython中使用lambda表達(dá)式來(lái)使用匿名函數(shù),回調(diào)函數(shù)即callback,先寫(xiě)一個(gè)函數(shù),讓預(yù)先寫(xiě)好的系統(tǒng)來(lái)調(diào)用,一個(gè)函數(shù)可以作為參數(shù)傳給另外一個(gè)函數(shù),或者一個(gè)函數(shù)的返回值為另外一個(gè)函數(shù),滿足其一則為高階函數(shù)
    2021-12-12
  • Python局部變量與全局變量區(qū)別原理解析

    Python局部變量與全局變量區(qū)別原理解析

    這篇文章主要介紹了Python局部變量與全局變量區(qū)別原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • django 捕獲異常和日志系統(tǒng)過(guò)程詳解

    django 捕獲異常和日志系統(tǒng)過(guò)程詳解

    這篇文章主要介紹了django-捕獲異常和日志系統(tǒng)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評(píng)論

宝清县| 台中市| 北票市| 龙口市| 泸州市| 澄迈县| 万源市| 临夏县| 孟村| 嘉黎县| 思茅市| 通道| 廉江市| 格尔木市| 兰西县| 电白县| 图木舒克市| 德安县| 石泉县| 景德镇市| 封丘县| 田林县| 罗城| 芜湖县| 兴城市| 新巴尔虎左旗| 榆林市| 玉田县| 乌审旗| 丹凤县| 平乐县| 虹口区| 轮台县| 萨迦县| 湛江市| 库伦旗| 林州市| 北川| 驻马店市| 无锡市| 文昌市|