1. 程式人生 > >DJANGO 資料庫API (轉)

DJANGO 資料庫API (轉)

管理器提供的初始結果集描述了給定型別的所有物件.不過通常你只需要這個物件集合中的一小部分(一個子集).

要生這樣一個結果集,你需要對初始結果集進行優化定製處理, 增加一些限制條件直到描述的子集滿足你的需要.最常用的兩個定製結果集的方法是:

filter(**kwargs)返回一個匹配查詢引數的新的結果集.exclude(**kwargs)返回一個不匹配查詢引數的新的結果集.

引數格式在下面 "欄位查詢" 小節有描述.

這兩個方法的返回值都是結果集物件,因此結果集可以進行鏈式處理:

Poll.objects.filter(
    question__startswith="What").exclude(
        pub_date__gte=datetime.now()).filter(
            pub_date__gte=datetime(2005,1,1))

...以一個初始結果集作為引數, 然後進行過濾, 再進行排除, 再進行另一個過濾. 這樣得到的最終結果就一個問題開頭單詞是 "What", 釋出日期在 2005年1月1日至今的所有民意測驗的集合.

每個結果集都是一個獨一無二的物件. 以上操作的每一步都生成了一個新的結果集:

q1 = Poll.objects.filter(question__startswith="What")
q2 = q1.exclude(pub_date__gte=datetime.now())
q3 = q1.filter(pub_date__gte=datetime.now())

這三步生成了三個結果集; 一個初始結果集包含所有的以"What"開頭的民意測驗, 兩個初始結果集的子集(一個排除條件,一個過濾條件).對原始結果集的改進過程並沒有影響到原始的結果集.

值得注意的是結果集的建立根本沒有訪問資料庫.只有當對結果集取值時才會訪問資料庫.