亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Django ORM filter() 的運用詳解

瀏覽:176日期:2024-10-06 14:19:02

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

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

代碼場景:

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

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

條件查詢

條件可以是:參數,字典,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調用,dict必須是一個字典。

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

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

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

輸入參數:

get的參數只能是model中定義的哪些字段,只支持嚴格匹配

filter的參數可以是字段也可以是擴展的where查詢關鍵字,如in,like

返回值:

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

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

異常:

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

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

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

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

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

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

標簽: Django
相關文章:
主站蜘蛛池模板: 澳门一级特黄真人毛片 | 国产一级精品高清一级毛片 | 成 人 黄 色 大 片 | 91亚洲精品福利在线播放 | 国产亚洲第一 | 亚洲国产91在线 | 亚洲福利小视频 | 中文字幕专区在线亚洲 | 成人h视频在线观看 | 免费一级网站 | 国产黄色三级网站 | 成人在激情在线视频 | 久久国产免费观看精品1 | 日本高清xxxx免费视频 | 夜色成人影院在线www | 国产第一页亚洲 | 成人午夜又粗又硬有大 | 国产ar高清视频+视频 | 欧美在线观看一区二区三区 | 国产伦精品一区二区三区视频金莲 | 嘿嘿嘿视频免费网站在线观看 | 狼人综合伊人 | 一级毛片aaa| 欧美限制级在线观看 | 一级毛片免费播放视频 | 亚洲高清色图 | 欧美成人免费全网站大片 | 国产精品精品国产一区二区 | 亚洲精品在线免费 | 日本欧美成 | 91短视频在线免费观看 | 爱爱免费观看视频 | 狼人香蕉国产在线视频 | 免费中文字幕不卡视频 | 国产在线不卡午夜精品2021 | 香蕉影视在线观看 | 女同志freelesvoices | 国产xvideoscom | 日韩视频在线观看中字 | 免费黄色的视频 | 特黄日韩免费一区二区三区 |