基础条件查询

查询语法

filter(模型属性__条件运算符=值)
例:
filter(name__contains='湖')
  • 说明:查询语句是属性名称和比较运算符间使用两个下划线相连,所以定义的模型属性名不能包括多个下划线
  • 实现sql中where的功能,可以调用过滤器filter()、exclude()、get()
    • 下面以filter()为例

查询的需求

# 1.查询id为1的书籍
# 2.查询书名包含‘湖’的书籍
# 3.查询书名以‘部’结尾的书籍
# 4.查询书名不为空的书籍
# 5.查询编号为2或4的书籍
# 6.查询编号大于2的书籍
# 7.查询id不等于3的书籍
# 8.查询1980年发表的书籍
# 9.查询1990年1月1日后发表的书籍

查询实现

  • 1.查询id为1的书籍 (exact : 判断相等)

      bookInfos = BookInfo.books.filter(id__exact=1)
    
  • 2.查询书名包含‘湖’的书籍 (contains : 是否包含)

      bookInfos = BookInfo.books.filter(name__contains='湖')
    
  • 3.查询书名以‘部’结尾的书籍 (startswith/endswith : 以什么开头/以什么结尾)

      bookInfos = BookInfo.books.filter(name__endswith='部')
    
  • 4.查询书名不为空的书籍 (isnull : 是否为null)

      bookInfos = BookInfo.books.filter(name__isnull=False)
    
  • 5.查询编号为2或4的书籍(pk:主键/id) (in : 是否包含在范围内)

      bookInfos = BookInfo.books.filter(pk__in=[2,4])
    
  • 6.查询编号大于2的书籍

    • gt、gte、lt、lte : 大于、大于等于、小于、小于等于

      bookInfos = BookInfo.books.filter(id__gt=2)
      
  • 7.查询id不等于3的书籍 (exclude : 条件以外的数据)

      bookInfos = BookInfo.books.exclude(id=3)
    
  • 8.查询1980年发表的书籍

    • year、month、day、week_day、hour、minute、second : 对日期时间类型的属性进行运算

      bookInfos = BookInfo.books.filter(pub_date__year=1980)
      
  • 9.查询1990年1月1日后发表的书籍

      from datetime import date
    
      bookInfos = BookInfo.books.filter(pub_date__gt=date(1990,1,1))
    

提示

  • exactcontainsstartswithendswith运算符都区分大小写
  • 在这些运算符前加上i表示不区分大小写
    • iexacticontainsistartswithiendswith