1. 程式人生 > 實用技巧 >ORM 之常用查詢、欄位型別、約束

ORM 之常用查詢、欄位型別、約束

1. orm常用欄位型別

# ### orm中的常用欄位型別
''' 
<1> CharField
        字串欄位, 用於較短的字串.
        CharField 要求必須有一個引數 maxlength, 
        用於從資料庫層和Django校驗層限制該欄位所允許的最大字元數.
 
<2> IntegerField
       #用於儲存一個整數.
 
<3> FloatField
        一個浮點數. 必須 提供兩個引數:         
        引數    描述
        max_digits    總位數(不包括小數點和符號)
        decimal_places    小數位數
                舉例來說, 要儲存最大值為 999 (小數點後儲存2位),你要這樣定義欄位:
                 
                models.FloatField(..., max_digits=5, decimal_places=2)
                要儲存最大值一百萬(小數點後儲存10位)的話,你要這樣定義:
                 
                models.FloatField(..., max_digits=19, decimal_places=10)
                admin 用一個文字框(<input type="text">)表示該欄位儲存的資料.
 
<4> AutoField
        一個 IntegerField, 新增記錄時它會自動增長. 你通常不需要直接使用這個欄位;
        自定義一個主鍵:my_id=models.AutoField(primary_key=True)
        如果你不指定主鍵的話,系統會自動新增一個主鍵欄位到你的 model.
 
<5> BooleanField
        A true/false field. admin 用 checkbox 來表示此類欄位.
 
<6> TextField
        一個容量很大的文字欄位.
        admin 用一個 <textarea> (文字區域)表示該欄位資料.(一個多行編輯框).
 
<7> EmailField
        一個帶有檢查Email合法性的 CharField,不接受 maxlength 引數.
 
<8> DateField
        一個日期欄位. 共有下列額外的可選引數:
        Argument    描述
        auto_now    當物件被儲存時,自動將該欄位的值設定為當前時間.
        通常用於表示 "last-modified" 時間戳.
        auto_now_add    當物件首次被建立時,自動將該欄位的值設定為當前時間.通常用於表示物件建立時間.
        (僅僅在admin中有意義...)
 
<9> DateTimeField
         一個日期時間欄位. 類似 DateField 支援同樣的附加選項.
 
'''  

2. 常用欄位約束

# ### orm中的常用欄位約束
'''
(1)null
 
如果為True,Django 將用NULL 來在資料庫中儲存空值。 預設值是 False.
 
(1)blank
 
如果為True,該欄位允許不填。預設為False。
要注意,這與 null 不同。null純粹是資料庫範疇的,而 blank 是資料驗證範疇的。
如果一個欄位的blank=True,表單的驗證將允許該欄位是空值。如果欄位的blank=False,該欄位就是必填的。
 
(2)default
 
欄位的預設值。可以是一個值或者可呼叫物件。如果可呼叫 ,每有新物件被建立它都會被呼叫。
 
(3)primary_key
 
如果為True,那麼這個欄位就是模型的主鍵。如果你沒有指定任何一個欄位的primary_key=True,
Django 就會自動新增一個IntegerField欄位做為主鍵,所以除非你想覆蓋預設的主鍵行為,
否則沒必要設定任何一個欄位的primary_key=True。
 
(4)unique
 
如果該值設定為 True, 這個資料欄位的值在整張表中必須是唯一的
 
(5)choices
由二元組組成的一個可迭代物件(例如,列表或元組),用來給欄位提供選擇項。 如果設定了choices ,預設的表單將是一個選擇框而不是標準的文字框,而且這個選擇框的選項就是choices 中的選項。
'''

  

3. 13個常用查詢api介面

# 1.all 查詢所有資料
# 2.count 獲取資料總數
# 3.first: 返回的第一條資料物件
# 4.last: 返回的最後一個數據物件
# 5.order_by 排序(正序)
# 6.order_by 排序(倒序) reverse
# 7.filter 按條件查詢[相當於where] 返回的queryset物件
# 8.exists():  如果QuerySet包含資料,就返回True,否則返回False
# 9.get 返回一個模型類物件 [等價於資料物件]
# 10.exclude: 排除符合條件的物件,返回的依然是queryset物件 [表達不等於除了的概念]
# 11.values 查詢某個欄位值,返回字典
# 12.values_list 查詢某個欄位值,返回元組
# 13.distinct 去重
# 鏈式操作(連貫操作)

4. 其他常用查詢

	# 範圍查詢
	# in  => __in
	# >   => __gt
	# >=  => __gte
	# <   => __lt
	# <=  => __lte
	# between .. and .. =>  __range=[100,200]
	# like => __contains="金"

	# like模糊查詢
	# __contains="金"
	# like(忽略大小寫)
	# __icontains="a"
	# __startswith="aa" 以..開頭
	# __endswith="bb"   以..結尾
	
	# 針對於date型別
	# __year  過濾日期欄位的年份
	# __month 過濾日期欄位的月份
	# __day   過濾日期欄位的日
	
	# 正則 __regex="^金.*$"