1. 程式人生 > >python課堂筆記之django-day01(5)

python課堂筆記之django-day01(5)

欄位屬性和選項
屬性命名限制:
1)不能是python的保留關鍵字。
2)不允許使用連續的下劃線,這是由django的查詢方式決定的。
3)定義屬性時需要指定欄位型別,通過欄位型別的引數指定選項,語法如下:
屬性名=models.欄位型別(選項)
欄位型別
使用時需要引入django.db.models包,欄位型別如下:
AutoField:自動增長的IntegerField,通常不用指定,不指定時Django會自動建立屬性名為id的自動增長屬性。
BooleanField:布林欄位,值為True或False。
NullBooleanField:支援Null、True、False三種值。
CharField(max_length=字元長度):字串。
引數max_length表示最大字元個數。
TextField:大文字欄位,一般超過4000個字元時使用。
IntegerField:整數。
DecimalField(max_digits=None, decimal_places=None):十進位制浮點數。
引數max_digits表示總位數。
引數decimal_places表示小數位數。
FloatField:浮點數。
DateField:[auto_now=False, auto_now_add=False]):日期。
引數auto_now表示每次儲存物件時,自動設定該欄位為當前時間,用於"最後一次修改"的時間戳,它總是使用當前日期,預設為false。
引數auto_now_add表示當物件第一次被建立時自動設定當前時間,用於建立的時間戳,它總是使用當前日期,預設為false。
引數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤。
TimeField:時間,引數同DateField。
DateTimeField:日期時間,引數同DateField。
FileField:上傳檔案欄位。
ImageField:繼承於FileField,對上傳的內容進行校驗,確保是有效的圖片。
選項
通過選項實現對欄位的約束,選項如下:
null:如果為True,表示允許為空,預設值是False。
blank:如果為True,則該欄位允許為空白,預設值是False。
對比:null是資料庫範疇的概念,blank是表單驗證證範疇的。
db_column:欄位的名稱,如果未指定,則使用屬性的名稱。
db_index:若值為True, 則在表中會為此欄位建立索引,預設值是False。
default:預設值。
primary_key:若為True,則該欄位會成為模型的主鍵欄位,預設值是False,一般作為AutoField的選項使用。
unique:如果為True, 這個欄位在表中必須有唯一值,預設值是False。
查詢
檢視mysql的日誌檔案:
1) sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 68 69行
2) sudo service mysql restart 重啟mysql服務
3) /var/log/mysql/mysql.log #mysql操作的記錄檔案。
4) sudo tail -f /var/log/mysql/mysql.log #實時檢視mysql檔案的內容。
get():返回表中滿足條件的一條且只能有一條資料。
如果查到多條資料,則拋異常:MultipleObjectsReturned
查詢不到資料,則拋異常:DoesNotExist
例:查詢圖書id為3的圖書資訊。
all():返回模型類對應表格中的所有資料。QuerySet型別,查詢集
例:查詢圖書所有資訊。
filter():引數寫查詢條件,返回滿足條件的資料。QuerySet
條件格式:
模型類屬性名__條件名=值
查詢圖書評論量為34的圖書的資訊:

  1. 判等 exact。
    例:查詢編號為1的圖書。
    BookInfo.objects.get(id=1)
    BookInfo.objects.get(id__exact=1)
  2. 模糊查詢
    例:查詢書名包含'傳'的圖書。contains
    BookInfo.objects.filter(btitlecontains='傳')
    例:查詢書名以'部'結尾的圖書 endswith 開頭:startswith
    BookInfo.objects.filter(btitle
    endswith='部')
  3. 空查詢 isnull select * from booktest_bookinfo where title is not null;
    例:查詢書名不為空的圖書。isnull
    BookInfo.objects.filter(btitle__isnull=False)
  4. 範圍查詢 in select * from booktest_bookinfo where id in (1,3,5)
    例:查詢編號為1或3或5的圖書。
    BookInfo.objects.filter(id__in = [1,3,5])
  5. 比較查詢
    例:查詢編號大於3的圖書。gt(greate than) lt(less than)小於 gte(equal) lte
    BookInfo.objects.filter(id__gt = 3)
  6. 日期查詢
    例:查詢1980年發表的圖書。
    BookInfo.objects.filter(bpub_date__year=1980)
    例:查詢1980年1月1日後發表的圖書。
    from datetime import date
    BookInfo.objects.filter(bpub_date__gt = date(1980,1,1))
    exclude:返回不滿足條件的資料。QuerySet
    例:查詢id不為3的圖書資訊。
    BookInfo.objects.exclude(id=3)