Django-ORM-單表操做

ORM字段參數及單表操做

1、字段參數

1.字段

AutoField(Field)  #當model中若是沒有自增列,則會自動建立一個列名爲id的列
    -int 自增列,必須填入參數primary_key=True
SmallIntegerField(IntegerField):
    - 小整數 -32768 ~ 32767
PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
    - 正小整數 0 ~ 32767
IntegerField(Field)
    - 整數列(有符號的) -2147483648 ~ 2147483647
PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
    - 正整數 0 ~ 2147483647
BigIntegerField(IntegerField):
    - 長整型(有符號的) -9223372036854775808 ~ 9223372036854775807
BooleanField(Field)
    - 布爾值類型
NullBooleanField(Field):
    - 能夠爲空的布爾值
CharField(Field)
    - 字符類型
    - 必須提供max_length參數, max_length表示字符長度
TextField(Field)
    - 文本類型
EmailField(CharField):
    - 字符串類型,Django Admin以及ModelForm中提供驗證機制
IPAddressField(Field)
    - 字符串類型,Django Admin以及ModelForm中提供驗證 IPV4 機制
GenericIPAddressField(Field)
    - 字符串類型,Django Admin以及ModelForm中提供驗證 Ipv4和Ipv6
    - 參數:
        protocol,用於指定Ipv4或Ipv6, 'both',"ipv4","ipv6"
        unpack_ipv4, 若是指定爲True,則輸入::ffff:192.0.2.1時候,可解析爲192.0.2.1,開啓刺功能,須要protocol="both"
URLField(CharField)
    - 字符串類型,Django Admin以及ModelForm中提供驗證 URL
SlugField(CharField)
    - 字符串類型,Django Admin以及ModelForm中提供驗證支持 字母、數字、下劃線、鏈接符(減號)
CommaSeparatedIntegerField(CharField)
    - 字符串類型,格式必須爲逗號分割的數字
UUIDField(Field)
    - 字符串類型,Django Admin以及ModelForm中提供對UUID格式的驗證
FilePathField(Field)
    - 字符串,Django Admin以及ModelForm中提供讀取文件夾下文件的功能
    - 參數:
            path,                      文件夾路徑
            match=None,                正則匹配
            recursive=False,           遞歸下面的文件夾
            allow_files=True,          容許文件
            allow_folders=False,       容許文件夾
FileField(Field)
    - 字符串,路徑保存在數據庫,文件上傳到指定目錄
    - 參數:
       upload_to = ""      上傳文件的保存路徑
       storage = None      存儲組件,默認django.core.files.storage.FileSystemStorage

ImageField(FileField)
    - 字符串,路徑保存在數據庫,文件上傳到指定目錄
    - 參數:
        upload_to = ""      上傳文件的保存路徑
        storage = None      存儲組件,默認django.core.files.storage.FileSystemStorage
        width_field=None,   上傳圖片的高度保存的數據庫字段名(字符串)
        height_field=None   上傳圖片的寬度保存的數據庫字段名(字符串)

DateTimeField(DateField)
    - 日期+時間格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]

DateField(DateTimeCheckMixin, Field)
    - 日期格式      YYYY-MM-DD

TimeField(DateTimeCheckMixin, Field)
    - 時間格式      HH:MM[:ss[.uuuuuu]]

DurationField(Field)
    - 長整數,時間間隔,數據庫中按照bigint存儲,ORM中獲取的值爲datetime.timedelta類型

FloatField(Field)
    - 浮點型

DecimalField(Field)
    - 10進制小數
    - 參數:
        max_digits,小數總長度
        decimal_places,小數位長度

BinaryField(Field)
    - 二進制類型

2.參數

1.null
若是未True,Django將用NULL來在數據庫中存儲空值,默認爲false

2.blank
若是未True,該字段容許爲空,默認爲False。
注:與null不一樣。null是數據庫範疇,blank是數據驗證

3.default
字段默認值

4.primary_key
若是未True,那麼這個字段就是模型的主鍵。若是沒有指定,Django會自動添加一個IntegerField字段做爲主鍵

5.unique
該字段的值在表中惟一

6.choices
由二元組組成的一個可迭代對象(例如,列表或元組),用來給字段提供選擇項。 若是設置了choices ,默認的表單將是一個選擇框而不是標準的文本框,<br>並且這個選擇框的選項就是choices 中的選項。

補充:git

  1. 數據庫遷移記錄都在 app下的migrations裏
  2. 使用showmigrations命令能夠查看沒有執行migrate的文件
  3. makemigrations是生成一個文件,migrate是將更改提交到數據量

2、單表操做

1.添加表記錄

方式一:返回結果是一個對象數據庫

# create方法的返回值book_obj就是插入book表中的紅樓夢這本書籍紀錄對象
book_obj=models.Book.objects.create(name='紅樓夢',price=23.8,publish='人民出版社',author='曹雪芹',create_data='2018-09-17')

方式二:先實例化產生對象,而後調用save方法保存django

book_obj=models.Book(name='水滸傳',price=99,publish='清華出版社',author='施耐庵',create_data='2017-09-17')
book_obj.save()

2.刪除表記錄

刪除前要先查詢app

方式一:code

ret=models.Book.objects.filter(name='紅樓夢').delete()
# ret返回的是被影響行數,queryset對象的.delete()方法
若是存在多本紅樓夢將會被所有刪除

方式二:orm

ret=models.Book.objects.filter(name='紅樓夢').first()
ret.delete()
只刪除一個

3.修改表記錄

方式一:對象

ret=models.Book.objects.filter(name='紅樓夢').update(price=20.9)

方式二:排序

對象沒有update方法,可是能夠用save來修改
book=models.Book.objects.filter(name='紅樓夢').first()
book.price=33
book.save()

4.查詢表記錄

1.all() 查詢全部結果 
models.Book.objects.all()

2.filter(**kwargs) 指定條件查詢   filter內可傳多個參數,逗號分隔,他們之間是and關係
models.Book.objects.filter(name='紅樓夢').first()
或者models.Book.objects.filter(name='紅樓夢')[0]
注:不支持負數

3.get(**kwargs) 有且只有一個結果,返回的是對象,不是queryset對象,一般使用id查詢 
ret=Book.objects.get(name='紅樓夢') 不存在或超過一個會報錯

4.exclude(**kwargs) 返回與篩選對象不匹配的對象
models.Book.objects.exclude(price>40)

5.order_by() 對查詢結果排序
models.Book.objects.all().order_by('price') 默認升序
倒序:models.Book.objects.all().order_by('-price')
能夠傳多個參數,逗號隔開。

6.reverse() 對查詢結果反向排序

7.count()查詢結果的個數

8.first()返回第一條記錄   last()返回最後一條記錄

9.exists()若是queryset包含數據就返回True,不然返回False
models.Book.objects.filter(name='紅樓夢').exists()

10.values()  queryset對象裏套字典

11.values_list() 返回元組序列,values返回的是一個字典序列

12.distinct()從結果中剔除重複記錄

-----------------------------------------------------------
基於雙下劃線的模糊查詢
1.大於__gt
models.Book.objects.filter(price__gt='89')

2.小於__lt=
models.Book.objects.filter(price__lt='99')

3.小於等於__lte=
models.Book.objects.filter(price__lte='99')

4.大於等於__gte
models.Book.objects.filter(price__gte='89')

5.in在XX中
ret=models.Book.objects.filter(price__in=['23.8','89','100'])

6.range 在xx範圍內 between and
ret=models.Book.objects.filter(price__range=[50,100])

7.contains 查詢名字帶有 紅 字的書
models.Book.objects.filter(name__contains='紅')

8.icontains 查詢名字帶p的書,忽略大小寫
models.Book.objects.filter(name__icontains='P')

9.startswith 以XX開頭
models.Book.objects.filter(name__startswith='紅')

10.endwith 以xx結尾
models.Book.objects.filter(name__endwith='夢')

11.__year按年查詢
models.Book.objects.filter(create_data_year='2018')
相關文章
相關標籤/搜索