-
笔记test
查看全部 -
不返回queryAPI
1.获取对象get(),get_or_create(),frist(),last(),latest(),earliest(),in_bulk()
2.创建对象create(),bulk_create(),create_or_updata()创建,批量创建,创建或更新
3.更新对象updata()updata_or_create()更新,更新或创建
4.删除对象delete()使用filte过滤
5其他操作exists(),count(),aggrrgate()判断是否存在,统计个数,聚合
查看全部 -
返回新的queryset得api:
exclude()根据条件排除一些记录Student.objects.all().exclude(name='a')
reverse()反向排序必须在模型类对应的元数据设置排序Student.objects.all().exclude(name='a').reverse()
distinct()去重
extra()实现字段别名
defer()排除一些字段
only()选择一些字段
valus(),valus_list()获取字典或元组形式得queryset
datas(),datatimes()根据时间日期获取查询集
union(),intersection(),difference()并集,交集,差集
select_relate()一对一多对一查询优化
prefetch_related()一对多,多对多查询优化;反向查询
annotate()使用聚合函数、求和、平均数 raw ()执行原生sql
course.objects,values('teacher').annotatea(avg = Avg'字段名')
查看全部 -
查询集介绍:
查询、检索、过滤
teacher = Teacher.objects.all()
teacher = Teacher.objects.get(主键、唯一键)返回一条结果
teacher = Teacher.objects.filter(fans__gte =) 返回多条结果 字段数据匹配大小写敏感 (fans__gte =大于等于、fans__exact刚好等于、fans__gt大于、fans__in在某某之内 、fans__isnull是否为空、fans__lt小于、fans__lte小于等于、fans__range在某某范围之内、、、、)
结果切片、排序、链式查询
Teacher.Object.all()[:1]
Teacher.Object.all().order_by('fans')/('-fans')
Teacher.Object.filter(fans__get).order_by('nickname')
查看执行的原生sql:
str(语句例如Teacher.Object.filter(fans__get).order_by('nickname').query)
查看全部 -
自增长字段,默认int,Auto = models.AutoFileld()
bigAuto = models.bigAutoFileld()
二进制数据:Binary = models.BinaryField()
布尔型:Boollean = models.BooleanField()
NullBoolean = models.NullBooleanField()
整型:5个字节:PositiveSmallInteger = models.PositiveSmallIntegerField()
6个字节:SmallInteger = models.SmallIntegerField()
10个字节:PositiveInteger = models.PositiveIntegerField()
11个字节:Integer = models.IntegerField()
20个字节:BigInteger = models.BigIntegerField()
字符串:varchar:Char = models.CharField()
longtext:Text = models.TextField()
时间日期:Data = models.DataField() 年月日
DataTime = models.DataTimeField() 年月日时分秒
Duration = models.DurationField() int
浮点型: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对象: 操作字段的数据
Course.objects.update(price=F('price') - 11) # 所有课程价格减11
Course.objects.filter(volume__lte=F('price') * 10)) # 查询课程价格的10倍小于销量的课程
Q对象: 结合AND, OR, NOT, |, ~, &实现复杂的查询
Couse.objects.filter(Q(title__icontains='java') & Q(volume__gte=5000)) # 查询销量大于等于5000的java课程
查看全部 -
select_related和prefetch_related保证在查询对象集合的时候,把指定的外键对象也一并完整查询加载,避免后续的重复查询
select_related适用于外键和多对一的关系查询
prefetch_related适用于一对多或者多对多的查询
查看全部 -
向数据表中导入数据的三种方式:
django shell: python manage.py shell => from courses.teacher import Teacher => t = Teacher(nickname="jack")=>t.save()
通过脚本导入数据(见截图)
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": "慕课网学习", "teacher": Teacher.objects.get(nickname="Jack")})
关联外键:
正向添加: Student.objects.get(nickname="ABC").course.add(*Course.objects.filter(volume__gte=1000)) # ABC学生关联到销量大于1000的课程
反向添加: Course.objetcs.get(title="Python系列教程2").student_set.add(*Student.objetcs.filter(study_time__gte=500)) #关联到学习时间大于500小时的同学
fixtures Django Serialization:提供一种可以被Django的Serialization识别的json格式的文件
导出数据: python manage.py dumpdata > xxxx.json
导入数据: python manage.py loaddata xxxx.json
查看全部 -
删除一个模型类的步骤
删除模型类代码
删除模型类在migrations目录下生成的对应文件
删除django在数据表migrations中对应的生成记录
删除对应的数据表
查看全部 -
Meta数据
db_table: 指定数据表的名称
ordering: 指定按照哪些字段来排序, 类型为一元元组
verbose_name: 为模型类设置一个直观可读的名称
abstract: =True将该类设置为基类, 不生成数据表, 仅供其它类继承
permissions: 为数据表设置额外的权限, 通过二元元组来实现(('定义好的权限', '权限的说明'), )
managed: 表示是否按照django既定的规则来管理数据表, 默认是True
unique_together: 指定联合唯一键,可以使用一元元组或二元元组(即多个唯一约束)
app_label: 定义模型类属于哪一个应用
db_tablespace: 定义数据表空间的名字
查看全部 -
自关联的两种写法
pid = models.ForeignKey('self', null=True, blank=True)
pid = models.ForeignKey('${TableName}', null=True, blank=True)
查看全部 -
关系型字段的on_delete参数
查看全部 -
所有字段都有的属性值
editable: 是否可以编辑, 默认为False
help_text: 在表单中显示帮助信息的参数
db_index: 为当前字段建立索引, 默认为False
null/blank: 字段是否可以为空, null约束数据库层面, blank约束前端表单提交时
unique: 唯一性约束, 默认为False
verbose_name: 设置字段别名(或备注)
primary_key: 设置当前字段是否为主键, 默认为False
db_column: 设置当前字段的名称
属于个别字段的参数
max_length[CharField]
unique_for_date[DateField]: 字段日期必须唯一
unique_for_month[DateField]
auto_now[DateField]: 修改记录时是否自动更新当前日期
auto_now_add[DateField]: 添加记录时是否自动设置当前日志
max_digits[DecimalField]: 总共有多少位
decimal_places[DecimalField]: 小数点后数字的个数
关系型字段的参数
related_name: 外键关联中的反向查询,由父表查询子表的信息
on_delete: 当一个被外键关联的对象被删除时,Django将模仿on_delete参数定义的SQL约束执行相应操作
CASCADE: 模拟SQL语言中的ON DELETE CASCADE约束,将定义有外键的模型对象同时删除(该操作为当前Django版本的默认操作)
PROTECT: 阻止上面的删除操作, 弹出ProtectedError异常
SET_NULL: 将外键字段设为null, 只有当字段设置了null=True时, 方可使用该值
SET_DEFAULT: 将外键字段设为默认值, 只有当字段设置了default参数时,方可使用
DO_NOTHING: 什么也不做
SET(): 设置为一个传递给SET()的值或者一个回调函数的返回值, 注意大小写
查看全部 -
一对一(OneToOneField)
models.OneToOneField(Test)
多对一(ForeignKey)
foreign = models.ForeignKey(Other)
多对多(ManyToManyField),默认或自定义中间表
models.ManyToManyField(B)
查看全部 -
# 自增长字段 Auto = models.AutoField() BigAuto = models.BigAutoField() # 二进制数据 Binary = models.BinaryField() # 布尔型 Boolean = models.BooleanField() NullBoolean = models.NullBooleanField() # 整型 PositiveSmallInteger = models.PositiveSmallIntegerField(db_column="age") # 5个字节 SmallInteger = models.SmallIntegerField(primary_key=False) # 6个字节 PositiveInteger = models.PositiveIntegerField() # 10个字节 Integer = models.IntegerField(verbose_name="11个字节大小") # 11个字节 BigInteger = models.BigIntegerField(unique=True) # 20个字节 # 字符串类型 Char = models.CharField(max_length=100, null=True, blank=True, db_index=True) # varchar Text = models.TextField(help_text="这个是longtext") # longtext # 时间日期类型 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实现 # 浮点型 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()
查看全部
举报