Django-ORM-單表操作
阿新 • • 發佈:2018-11-12
ORM欄位引數及單表操作
一、欄位引數
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 中的選項。
補充:
- 資料庫遷移記錄都在 app下的migrations裡
- 使用showmigrations命令可以檢視沒有執行migrate的檔案
- makemigrations是生成一個檔案,migrate是將更改提交到資料量
二、單表操作
1.新增表記錄
方式一:返回結果是一個物件
# create方法的返回值book_obj就是插入book表中的紅樓夢這本書籍紀錄物件 book_obj=models.Book.objects.create(name='紅樓夢',price=23.8,publish='人民出版社',author='曹雪芹',create_data='2018-09-17')
方式二:先例項化產生物件,然後呼叫save方法儲存
book_obj=models.Book(name='水滸傳',price=99,publish='清華出版社',author='施耐庵',create_data='2017-09-17')
book_obj.save()
2.刪除表記錄
刪除前要先查詢
方式一:
ret=models.Book.objects.filter(name='紅樓夢').delete()
# ret返回的是被影響行數,queryset物件的.delete()方法
如果存在多本紅樓夢將會被全部刪除
方式二:
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')