
# 自增长 auto = models.autoFIEld() Bigauto = models.BigautoFIEld() # 二进制 Binary = models.BinaryFIEld() # 布尔型 Boolean = models.BooleanFIEld() NullBoolean = models.NullBooleanFIEld() # 整型 PositiveSmallinteger = models.PositiveSmallintegerFIEld() #正整数 5个字节 Smallinteger = models.SmallintegerFIEld() # 整数 6个字节 PositiveInteger = models.PositiveIntegerFIEld() # 正整数 10个字节 Integer = models.IntegerFIEld() # 整数 11个字节 BigInteger = models.BigIntegerFIEld() # 整数 20个字节 # 浮点型 float = models.floatFIEld() Decimal = models.DecimalFIEld() # 指定总位数和小数位数 # 字符串 Char = models.CharFIEld() # 指定最大长度 数据库对应varchar Text = models.TextFIEld() # 不限长度 数据库对应longtext # 时间日期类型 Date = models.DateFIEld() DateTime = models.DateTimeFIEld( Duration = models.DurationFIEld() # 持续时间,数据表中为int,python中timedelta实现 # 其他字段 Email = models.EmailFIEld() Image = models.ImageFIEld() file = models.fileFIEld() filePath = models.filePathFIEld() URL = models.URLFIEld() UUID = models.UUIDFIEld() GenericIPAddress = models.GenericIPAddressFIEld() # IPv4或者IPv6字段参数
# 共有参数 db_column #字段名 primary_key #是否为主键 verbose_name #别名 unique #是否添加唯一约束 help_text #帮助信息 editable #是否可编辑 null #数据库是否可为空 blank #表单中是否可为空 db_index #是否添加索引 # 特殊参数 Decimal = models.DecimalFIEld(max_digits=4,decimal_places=2) # 总共4位,其中小数点2位 11.22 16.14 Date = models.DateFIEld(unique_for_date=True,auto_Now=True) # 日期唯一 自动更新修改日期 DateTime = models.DateTimeFIEld(unique_for_month=True,auto_Now_add=True) # 月份唯一 自动更新添加日期 Char = models.CharFIEld(max_length=100) # 最大长度 # 关系参数 one2one = models.OnetoOneFIEld(Test,related_name='one') # related_name 用于反向查询 """on_delete 当一个被外键关联的对象被删除时,Django将模仿on_delete参数定义的sql约束执行相应的 *** 作 如下6种 *** 作 CASCADE: 模拟sql语言中的ON DELETE CASCADE约束,将定义有外键的模型对象同时删除(该 *** 作为当前版本Django-1.11默认 *** 作) PROTECT: 阻止上面的删除 *** 作,但是d出ProtectedError异常 SET_NulL: 将外键字段设为null,只有当字段设置了null=True时,方可使用 SET_DEFAulT: 将外键字段设为默认值,只有当字段设置了default参数时,方可使用 DO_nothing: 什么也不做 SET(): 设置为一个传递给SET()的值或者一个回调函数的返回值,注意大小写 """ foreign1 = models.ForeignKey(A,on_delete=models.CASCADE) foreign2 = models.ForeignKey(A,on_delete=models.PROTECT) foreign3 = models.ForeignKey(A,on_delete=models.SET_NulL,null=True,blank=True) foreign4 = models.ForeignKey(A,on_delete=models.SET_DEFAulT,default=0) foreign5 = models.ForeignKey(A,on_delete=models.DO_nothing) foreign6 = models.ForeignKey(A,on_delete=models.SET)元数据
# Model类中自带一个Meta子类用于定义模型元数据,元数据主要对数据表进行定义 db_table = 'address' # 表名称 ordering = ['pID'] # 排序 verbose_name = '省市县地址信息' # 数据表别名 verbose_name_plural = verbose_name # 复数别名 abstract = True # 只用于继承而不生成数据表 permissions = (('定义好的权限','权限说明'),) class Task(models.Model): class Meta: #自定义权限 permissions = ( ("vIEw_task","Can see available tasks"),("change_task_status","Can change the status of tasks"),("close_task","Can remove a task by setting its status as closed"),) #用户检查自定义权限 user.has_perm('app.vIEw_task') managed = False # 是否纳入管理,False则不会生成表 unique_together = ('address','note') # 联合唯一键 app_label = 'courses' # INSTALLED_APPS中如果没有添加courses应用,这里需要指定 db_tablespace # 定义数据库表空间的名字 查询接口 Teacher.objects.all()Teacher.objects.get(nickname='Jack')Teacher.objects.filter(fans__gte=500)Teacher.objects.filter(fans__in=[666,123]) # 在列表内Teacher.objects.filter(nickname__icontains='A') icontains # 大小写不敏感Teacher.objects.all()[:1] # 切片Teacher.objects.all().order_by('-fans') # 排序 Teacher.objects.filter(fans__gte=500).order_by('nickname') # 链式查询str(Teacher.objects.filter(fans__gte=500).order_by('nickname').query) # 查看原生sqlStudent.objects.all().exclude(nickname='A同学') # 排除Student.objects.all().reverse() 反向排序 # models的Meta中需要添加orderingStudent.objects.all().distinct() # 去重Student.objects.all().extra(select={'name': 'nickname'}) # 取别名Student.objects.all().defer() # 排除某些字段Student.objects.all().only() # 只获取某些字段Student.objects.all().values('nickname','hobby') # 获取字典形式的querySet 分组Student.objects.all().values_List('nickname','hobby') # 获取元组形式的querySet 分组Student.objects.all().values_List('nickname',flat=True) # 当只有一个字段时,flat=True可以将元组中的值直接放入列表中Student.objects.dates('created_at','month',order='DESC') # 根据时期获取查询集Student.objects.datetimes('created_at',order='DESC') # 根据时期获取查询集p_240 = Course.objects.filter(price__gte=240)p_260 = Course.objects.filter(price__lte=260)p_240.union(p_260) # 并集 innodb只支持并集p_240.intersection(p_260) # 交集p_240.difference(p_260) # 差集courses = Course.objects.all().select_related('teacher') # 一对一 多对一查询优化students = Student.objects.all().prefetch_related('course') # 一对多 多对多查询优化 Teacher.objects.get(nick='Jack').course_set.all() # 反向查询Course.objects.values('teacher').annotate(vol=Sum('volume')) # 聚合计数Course.objects.values('teacher').annotate(pri=Avg('price')) # 聚合计数get_or_create()Course.objects.first()Course.objects.last()Course.objects.earlIEst() # Meta中添加get_latest_byCourse.objects.latest() # Meta中添加get_latest_byCourse.objects.in_bulk(['课程1','课程2'])create()bulk_create()update_or_create()update()Course.objects.filter(Title='test').delete()Course.objects.filter(Title='test').exists()Course.objects.count()Course.objects.aggregate(Max('price'),Min('price'),Avg('price'),Sum('volume'))#F对象和Q对象#F对象: *** 作字段的数据Course.objects.update(price=F('price') - 11)Course.objects.filter(volume__lte=F('price')*10)#Q对象:结合AND,OR,NOT,|,~,&实现复杂的查询Course.objects.filter(Q(Title__icontains='java') & Q(volume__gte=5000)) 总结 以上是内存溢出为你收集整理的Django ORM整理全部内容,希望文章能够帮你解决Django ORM整理所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)