Django ORM整理

Django ORM整理,第1张

概述字段类型 # 自增长 Auto = models.AutoField() BigAuto = models.BigAutoField() # 二进制 Binary = models.BinaryField() # 布尔型 Boolean = models.BooleanField() NullBoolean = mode 字段类型
# 自增长    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整理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1190747.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存