-
筆記test
查看全部 -
不返回queryAPI
1.獲取對(duì)象get(),get_or_create(),frist(),last(),latest(),earliest(),in_bulk()
2.創(chuàng)建對(duì)象create(),bulk_create(),create_or_updata()創(chuàng)建,批量創(chuàng)建,創(chuàng)建或更新
3.更新對(duì)象updata()updata_or_create()更新,更新或創(chuàng)建
4.刪除對(duì)象delete()使用filte過(guò)濾
5其他操作exists(),count(),aggrrgate()判斷是否存在,統(tǒng)計(jì)個(gè)數(shù),聚合
查看全部 -
返回新的queryset得api:
exclude()根據(jù)條件排除一些記錄Student.objects.all().exclude(name='a')
reverse()反向排序必須在模型類(lèi)對(duì)應(yīng)的元數(shù)據(jù)設(shè)置排序Student.objects.all().exclude(name='a').reverse()
distinct()去重
extra()實(shí)現(xiàn)字段別名
defer()排除一些字段
only()選擇一些字段
valus(),valus_list()獲取字典或元組形式得queryset
datas(),datatimes()根據(jù)時(shí)間日期獲取查詢集
union(),intersection(),difference()并集,交集,差集
select_relate()一對(duì)一多對(duì)一查詢優(yōu)化
prefetch_related()一對(duì)多,多對(duì)多查詢優(yōu)化;反向查詢
annotate()使用聚合函數(shù)、求和、平均數(shù) raw ()執(zhí)行原生sql
course.objects,values('teacher').annotatea(avg = Avg'字段名')
查看全部 -
查詢集介紹:
查詢、檢索、過(guò)濾
teacher = Teacher.objects.all()
teacher = Teacher.objects.get(主鍵、唯一鍵)返回一條結(jié)果
teacher = Teacher.objects.filter(fans__gte =) 返回多條結(jié)果 字段數(shù)據(jù)匹配大小寫(xiě)敏感 (fans__gte =大于等于、fans__exact剛好等于、fans__gt大于、fans__in在某某之內(nèi) 、fans__isnull是否為空、fans__lt小于、fans__lte小于等于、fans__range在某某范圍之內(nèi)、、、、)
結(jié)果切片、排序、鏈?zhǔn)讲樵?/p>
Teacher.Object.all()[:1]
Teacher.Object.all().order_by('fans')/('-fans')
Teacher.Object.filter(fans__get).order_by('nickname')
查看執(zhí)行的原生sql:
str(語(yǔ)句例如Teacher.Object.filter(fans__get).order_by('nickname').query)
查看全部 -
自增長(zhǎng)字段,默認(rèn)int,Auto = models.AutoFileld()
bigAuto?= models.bigAutoFileld()
二進(jìn)制數(shù)據(jù):Binary = models.BinaryField()
布爾型:Boollean = models.BooleanField()
NullBoolean = models.NullBooleanField()
整型:5個(gè)字節(jié):PositiveSmallInteger = models.PositiveSmallIntegerField()
6個(gè)字節(jié):SmallInteger = models.SmallIntegerField()
10個(gè)字節(jié):PositiveInteger = models.PositiveIntegerField()
11個(gè)字節(jié):Integer = models.IntegerField()
20個(gè)字節(jié):BigInteger = models.BigIntegerField()
字符串:varchar:Char = models.CharField()
longtext:Text?= models.TextField()
時(shí)間日期:Data = models.DataField()? 年月日
DataTime = models.DataTimeField()? 年月日時(shí)分秒
Duration = models.DurationField()? int
浮點(diǎn)型:Float = FloatField()
Decimal = model.DecimalField()
其他字段:
Email = models.EmailField()
Image = models.ImageField()
File = models.FileField()
FilePath = models.FilePathField()
Url = models.UrlField()
UUID = models.UUIDField()
GenericIPAddress = models.GenericIPAddressField()
查看全部 -
F對(duì)象: 操作字段的數(shù)據(jù)
Course.objects.update(price=F('price') - 11) # 所有課程價(jià)格減11
Course.objects.filter(volume__lte=F('price') * 10)) # 查詢課程價(jià)格的10倍小于銷(xiāo)量的課程
Q對(duì)象: 結(jié)合AND, OR, NOT, |, ~, &實(shí)現(xiàn)復(fù)雜的查詢
Couse.objects.filter(Q(title__icontains='java') & Q(volume__gte=5000)) # 查詢銷(xiāo)量大于等于5000的java課程
查看全部 -
select_related和prefetch_related保證在查詢對(duì)象集合的時(shí)候,把指定的外鍵對(duì)象也一并完整查詢加載,避免后續(xù)的重復(fù)查詢
select_related適用于外鍵和多對(duì)一的關(guān)系查詢
prefetch_related適用于一對(duì)多或者多對(duì)多的查詢
查看全部 -
向數(shù)據(jù)表中導(dǎo)入數(shù)據(jù)的三種方式:
django shell: python manage.py shell => from courses.teacher import Teacher => t = Teacher(nickname="jack")=>t.save()
通過(guò)腳本導(dǎo)入數(shù)據(jù)(見(jiàn)截圖)
Teacher.objects.create(nickname="Jack", introduction="Python工程師", fans=123)
Course.object.bulk_create([Course(title="Python系列教程(1)", teacher=Teacher.objects.get(nickname="Jack"), type=.....)])
Student.objetcs.update_or_create(nickname="ABC", default={"age": 18, "gender": 2, "study_time": 0})
TeacherAssistant.objects.get_or_create(nickname="助教1", default={"hubby":? "慕課網(wǎng)學(xué)習(xí)", "teacher": Teacher.objects.get(nickname="Jack")})
關(guān)聯(lián)外鍵:
正向添加: Student.objects.get(nickname="ABC").course.add(*Course.objects.filter(volume__gte=1000)) # ABC學(xué)生關(guān)聯(lián)到銷(xiāo)量大于1000的課程
反向添加: Course.objetcs.get(title="Python系列教程2").student_set.add(*Student.objetcs.filter(study_time__gte=500)) #關(guān)聯(lián)到學(xué)習(xí)時(shí)間大于500小時(shí)的同學(xué)
fixtures Django Serialization:提供一種可以被Django的Serialization識(shí)別的json格式的文件
導(dǎo)出數(shù)據(jù): python manage.py dumpdata > xxxx.json
導(dǎo)入數(shù)據(jù): python manage.py loaddata xxxx.json
查看全部 -
刪除一個(gè)模型類(lèi)的步驟
刪除模型類(lèi)代碼
刪除模型類(lèi)在migrations目錄下生成的對(duì)應(yīng)文件
刪除django在數(shù)據(jù)表migrations中對(duì)應(yīng)的生成記錄
刪除對(duì)應(yīng)的數(shù)據(jù)表
查看全部 -
Meta數(shù)據(jù)
db_table: 指定數(shù)據(jù)表的名稱
ordering: 指定按照哪些字段來(lái)排序, 類(lèi)型為一元元組
verbose_name: 為模型類(lèi)設(shè)置一個(gè)直觀可讀的名稱
abstract: =True將該類(lèi)設(shè)置為基類(lèi), 不生成數(shù)據(jù)表, 僅供其它類(lèi)繼承
permissions: 為數(shù)據(jù)表設(shè)置額外的權(quán)限, 通過(guò)二元元組來(lái)實(shí)現(xiàn)(('定義好的權(quán)限', '權(quán)限的說(shuō)明'), )
managed: 表示是否按照django既定的規(guī)則來(lái)管理數(shù)據(jù)表, 默認(rèn)是True
unique_together: 指定聯(lián)合唯一鍵,可以使用一元元組或二元元組(即多個(gè)唯一約束)
app_label: 定義模型類(lèi)屬于哪一個(gè)應(yīng)用
db_tablespace: 定義數(shù)據(jù)表空間的名字
查看全部 -
自關(guān)聯(lián)的兩種寫(xiě)法
pid = models.ForeignKey('self', null=True, blank=True)
pid = models.ForeignKey('${TableName}', null=True, blank=True)
查看全部 -
關(guān)系型字段的on_delete參數(shù)
查看全部 -
所有字段都有的屬性值
editable: 是否可以編輯, 默認(rèn)為False
help_text: 在表單中顯示幫助信息的參數(shù)
db_index: 為當(dāng)前字段建立索引, 默認(rèn)為False
null/blank: 字段是否可以為空, null約束數(shù)據(jù)庫(kù)層面, blank約束前端表單提交時(shí)
unique: 唯一性約束, 默認(rèn)為False
verbose_name: 設(shè)置字段別名(或備注)
primary_key: 設(shè)置當(dāng)前字段是否為主鍵, 默認(rèn)為False
db_column: 設(shè)置當(dāng)前字段的名稱
屬于個(gè)別字段的參數(shù)
max_length[CharField]
unique_for_date[DateField]: 字段日期必須唯一
unique_for_month[DateField]
auto_now[DateField]: 修改記錄時(shí)是否自動(dòng)更新當(dāng)前日期
auto_now_add[DateField]: 添加記錄時(shí)是否自動(dòng)設(shè)置當(dāng)前日志
max_digits[DecimalField]: 總共有多少位
decimal_places[DecimalField]: 小數(shù)點(diǎn)后數(shù)字的個(gè)數(shù)
關(guān)系型字段的參數(shù)
related_name: 外鍵關(guān)聯(lián)中的反向查詢,由父表查詢子表的信息
on_delete:?當(dāng)一個(gè)被外鍵關(guān)聯(lián)的對(duì)象被刪除時(shí),Django將模仿on_delete參數(shù)定義的SQL約束執(zhí)行相應(yīng)操作
CASCADE: 模擬SQL語(yǔ)言中的ON DELETE CASCADE約束,將定義有外鍵的模型對(duì)象同時(shí)刪除(該操作為當(dāng)前Django版本的默認(rèn)操作)
PROTECT: 阻止上面的刪除操作, 彈出ProtectedError異常
SET_NULL: 將外鍵字段設(shè)為null, 只有當(dāng)字段設(shè)置了null=True時(shí), 方可使用該值
SET_DEFAULT: 將外鍵字段設(shè)為默認(rèn)值, 只有當(dāng)字段設(shè)置了default參數(shù)時(shí),方可使用
DO_NOTHING: 什么也不做
SET(): 設(shè)置為一個(gè)傳遞給SET()的值或者一個(gè)回調(diào)函數(shù)的返回值, 注意大小寫(xiě)
查看全部 -
一對(duì)一(OneToOneField)
models.OneToOneField(Test)
多對(duì)一(ForeignKey)
foreign = models.ForeignKey(Other)
多對(duì)多(ManyToManyField),默認(rèn)或自定義中間表
models.ManyToManyField(B)
查看全部 -
#?自增長(zhǎng)字段 Auto?=?models.AutoField() BigAuto?=?models.BigAutoField() #?二進(jìn)制數(shù)據(jù) Binary?=?models.BinaryField() #?布爾型 Boolean?=?models.BooleanField() NullBoolean?=?models.NullBooleanField() #?整型 PositiveSmallInteger?=?models.PositiveSmallIntegerField(db_column="age")??#?5個(gè)字節(jié) SmallInteger?=?models.SmallIntegerField(primary_key=False)??#?6個(gè)字節(jié) PositiveInteger?=?models.PositiveIntegerField()??#?10個(gè)字節(jié) Integer?=?models.IntegerField(verbose_name="11個(gè)字節(jié)大小")??#?11個(gè)字節(jié) BigInteger?=?models.BigIntegerField(unique=True)??#?20個(gè)字節(jié) #?字符串類(lèi)型 Char?=?models.CharField(max_length=100,?null=True,?blank=True,?db_index=True)??#?varchar Text?=?models.TextField(help_text="這個(gè)是longtext")??#?longtext #?時(shí)間日期類(lèi)型 Date?=?models.DateField(unique_for_date=True,?auto_now=True) DateTime?=?models.DateTimeField(editable=False,?unique_for_month=True,?auto_now_add=True) Duration?=?models.DurationField()??#?int,?Python?timedelta實(shí)現(xiàn) #?浮點(diǎn)型 Float?=?models.FloatField() Decimal?=?models.DecimalField(max_digits=4,?decimal_places=2)??#?11.22,?16.34 #?其它字段 Email?=?models.EmailField()??#?郵箱 Image?=?models.ImageField() File?=?models.FileField() FilePath?=?models.FilePathField() URL?=?models.URLField() UUID?=?models.UUIDField() GenericIPAddress?=?models.GenericIPAddressField()
查看全部
舉報(bào)