亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Django ORM filter() 的運用詳解

 更新時間:2020年05月14日 14:40:31   作者:weixin_42402500  
這篇文章主要介紹了Django ORM filter() 的運用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

最近發(fā)布代碼的時候,遇到一個問題,發(fā)現(xiàn)Python中eval()函數(shù)的危險性.然而我還是個菜鳥,其中有一段代碼是這樣的。

queryset = eval("models.TUserInfo.objects.filter({0})[{1}:{2}]".format(select,page_num * page - page_num,page_num * page))

代碼場景:

這是一個獲取信息的API.所以需要去數(shù)據(jù)庫里取對應(yīng)信息,但是你不知道獲取信息是根據(jù)哪幾個字段而來,需要靠用戶傳入,在這里eval()函數(shù)就提供給某些人員很好的入侵性.所以用了另外一種方式去改良代碼.

filter(**kwargs): 它包含了與所給篩選條件相匹配的對象

條件查詢

條件可以是:參數(shù),字典,Q

  def filter(self, *args, **kwargs):
    """
    Returns a new QuerySet instance with the args ANDed to the existing
    set.
    """
    return self._filter_or_exclude(False, *args, **kwargs)

于是乎,便改用了字典傳值的方式.避免了先將代碼字符串化,然后在將其代碼化。

用**dict調(diào)用,dict必須是一個字典。

queryset = models.TUserInfo.objects.filter(**field_dict)[page_num * page - page_num:page_num * page]

因為沒有想到用其它方式來運用orm,所以有些新奇,用字典傳值也不失為一種良好運用。

補充知識:django orm查詢中filter與get的區(qū)別

輸入?yún)?shù):

get的參數(shù)只能是model中定義的哪些字段,只支持嚴(yán)格匹配

filter的參數(shù)可以是字段也可以是擴(kuò)展的where查詢關(guān)鍵字,如in,like

返回值:

get返回值是一個定義的model對象

filter返回值是一個新的QuerySet對象,然后可以對QuerySet在進(jìn)行查詢返回新的QuerySet對象,支持鏈?zhǔn)讲僮?,QuerySet一個集合對象,可使用迭代或者遍歷,切片等,但是不等于list類型(是一個object對象集合)

異常:

get只有一條記錄返回的時候才正常,也就是說明get查詢字段必須是主鍵或者唯一約束的字段。當(dāng)返回多條記錄或者沒有找到記錄的時候都會拋出異常

get方法是從數(shù)據(jù)庫的取得一個匹配的結(jié)果,返回一個對象,如果記錄不存在的話,它會報錯,有多條記錄也會報錯。

filter有沒有匹配的記錄都可以

filter方法是從數(shù)據(jù)庫的取得匹配的結(jié)果,返回一個對象列表,如果記錄不存在的話,它會返回[]。

另外,從別的資料里看到filter好像有緩存數(shù)據(jù)的功能,第一次查詢數(shù)據(jù)庫并生成緩存,下次再調(diào)用filter方法的話,直接取得緩存的數(shù)據(jù),會get方法每次執(zhí)行都是直接查詢數(shù)據(jù)庫的,不知道這個是不是正確,看看就好。

以上這篇Django ORM filter() 的運用詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 簡單介紹Python的第三方庫yaml

    簡單介紹Python的第三方庫yaml

    今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識,文章圍繞著Python的第三方庫yaml展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Python中Tkinter組件Menu的具體使用

    Python中Tkinter組件Menu的具體使用

    本文主要介紹了Python中Tkinter組件Menu的具體使用,Menu組件用于實現(xiàn)頂級菜單、下拉菜單和彈出菜單,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Python docutils文檔編譯過程方法解析

    Python docutils文檔編譯過程方法解析

    這篇文章主要介紹了Python docutils文檔編譯過程方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Django中ORM基本應(yīng)用與原理解析

    Django中ORM基本應(yīng)用與原理解析

    Django的ORM模塊是框架特色功能之一,它把數(shù)據(jù)表與Python類對應(yīng)、表字段與類屬性對應(yīng)、類實例與數(shù)據(jù)記錄對應(yīng),并將對類實例的操作映射到數(shù)據(jù)庫中,這篇文章主要介紹了Django?ORM基本應(yīng)用與原理剖析,需要的朋友可以參考下
    2022-10-10
  • 如何利用Python開發(fā)一個簡單的猜數(shù)字游戲

    如何利用Python開發(fā)一個簡單的猜數(shù)字游戲

    這篇文章主要給大家介紹了關(guān)于如何利用Python開發(fā)一個簡單的猜數(shù)字游戲的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • python opencv旋轉(zhuǎn)圖像(保持圖像不被裁減)

    python opencv旋轉(zhuǎn)圖像(保持圖像不被裁減)

    這篇文章主要為大家詳細(xì)介紹了python opencv旋轉(zhuǎn)圖像,保持圖像不被裁減,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • python操作cfg配置文件方式

    python操作cfg配置文件方式

    今天小編就為大家分享一篇python操作cfg配置文件方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python使用tornado實現(xiàn)登錄和登出

    python使用tornado實現(xiàn)登錄和登出

    這篇文章主要為大家詳細(xì)介紹了python使用tornado實現(xiàn)登錄和登出,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • tensorflow使用神經(jīng)網(wǎng)絡(luò)實現(xiàn)mnist分類

    tensorflow使用神經(jīng)網(wǎng)絡(luò)實現(xiàn)mnist分類

    這篇文章主要為大家詳細(xì)介紹了tensorflow使用神經(jīng)網(wǎng)絡(luò)實現(xiàn)mnist分類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python爬取豆瓣數(shù)據(jù)實現(xiàn)過程解析

    Python爬取豆瓣數(shù)據(jù)實現(xiàn)過程解析

    這篇文章主要介紹了Python爬取豆瓣數(shù)據(jù)實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10

最新評論