数据库单表查询之神奇的双下划线
models.Tb1.objects.filter(id__lt=10, id__gt=1) 、
#获取id大于1 且 小于10的值
models.Tb1.objects.filter(id__in=[11, 22, 33])
获取id等于11、22、33的数据
models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in
models.Tb1.objects.filter(name__contains=“ven”) # 获取name字段包含"ven"的
models.Tb1.objects.filter(name__icontains=“ven”) # icontains大小写不敏感
models.Tb1.objects.filter(id__range=[1, 3])
#id范围是1到3的,等价于SQL的between and
类似的还有:startswith,istartswith, endswith, iendswith
date字段还可以:
models.Class.objects.filter(first_day__year=2017)
关系字段
(1)一对多
外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多’中’多’的一方。
例如:一个学科对应多个学生,一个学生对应一个学科。
字段: ForeignKey
字段参数:
to : 设置要关联的表。
to_field : 设置要关联的表的字段。 默认关联的是表的id。
如果想关联其他字段名称可以使用此字段。
on_delete: 当删除关联表中的数据时,当前表与其关联的行的行为。
models.CASCADE :删除关联数据,与之关联也删除。
models.DO_NOTHING:删除关联数据,引发错误IntegrityError。
models.PROTECT: 删除关联数据,引发错误ProtectedError。
…
正向查询和反向查询:
注意:
1.正向查询是指从有外键的一方查找另外一方。
2.反向查询是指从没有外键的一方查找有外键的一方。
3.不管是正向还是反向进行对象查找的时候获取的是对象而不是QuerySet集合。
4.正向查询语法:
obj.外键字段(关联字段) -->> 获取对象。
obj.外键字段(关联字段).字段–>> 获取对象对应的字段值。
5.反向查询语法:
obj.表名_set.xxx
(2)多对多
用于表示多对多的关联关系。在数据库中通过第三张表来建立关联关系。
字段: ManyToManyField
字段参数to: 设置要关联的表
注意: 正向查询和反向查询同一对多规则。
例如:一个老师对应多个学生,一个学生对应多个老师。
(3)一对一
一对一的关联关系多用在当一张表的不同字段查询频次差距过大的情况下,将本可以存储在一张表的字段拆开放置在两张表中,然后将两张表建立一对一的关联关系。
字段:OneToOneField
字段参数
to:设置要关联的表。
to_field:设置要关联的字段。
on_delete: 同ForeignKey字段。