_姜2

作者: dittoyy3991 | 来源:发表于2018-06-15 17:08 被阅读11次

    = = =

    @sql-models
    
    ***新建
    get_or_create(defaults=None, **kwargs)#不存在就新建
    update_or_create(defaults=None, **kwargs)#不存在就新建
    bulk_create(objs, batch_size=None)#一次插入多个
    
    汇总聚合aggregate(args, *kwargs)
    返回汇总值的字典(平均值,总和等)
    q = Blog.objects.aggregate(Count('entry'))
    {'entry__count': 16}
    使用关键字参数来修改聚合函数名
    q = Blog.objects.aggregate(number_of_entries=Count('entry'))
    {'number_of_entries': 16}
    
    exists()判断存在返回true/false
    some_queryset.exists()
    
    update(**kwargs)对指定的字段执行批量更新操作,并返回匹配的行数
    Entry.objects.filter(id=64).update(comments_on=True)
    
    delete()返回删掉的数组
    blogs.delete()
    (5, {'weblog.Blog': 1, 'weblog.Entry': 2, 'weblog.Entry_authors': 2})
    
    保存一个外键字段得save()
    entry = Entry.objects.get(pk=1)
    cheese_blog = Blog.objects.get(name="Cheddar Talk")
    entry.blog = cheese_blog
    entry.save()#保存对象
    
    多对多字段add()无需save()可一次多个
    joe = Author.objects.create(name="Joe", tagline='Alews.')#创建对象
    entry.authors.add(joe)
    entry.authors.add(john, paul, george, ringo)
    
    ***selsect查询
    使用all()方法获取某表所有记录
    all_entries = Entry.objects.all()
    
    ***单一检索filter()、exclude()和get()
    one_entry = Entry.objects.get(pk=1)
    过滤可以多个可以链式,得到的是独立的子数据QuerySets
    filter(**kwargs):返回一个根据指定参数查询出来的QuerySet
    exclude(**kwargs):返回除了根据指定参数查询出来结果的QuerySet
    Entry.objects.filter(headline__startswith="What").exclude(pub_date__gte=datetime.date.today()).exclude(body_text__icontains="food")
    
    切片限制相当于SQL语句中的LIMIT和OFFSET
    Entry.objects.all()[5:10]    # 返回第6个到第10个对象
    不支持负索引!例如 Entry.objects.all()[-1]是不允许的
    
    iexact不区分大小写
    Blog.objects.get(name__iexact="beatles blog")
    contains包含但大小写敏感
    Entry.objects.get(headline__contains='Lennon')
    SELECT ... WHERE headline LIKE '%Lennon%';
    lt/gt小于大于 lte/gte小于等于大于等于
    Entry.objects.get(headline__lt='89')
    istartswith和iendswith
    是不区分大小写的模式
    startswith和endswith
    以什么开头和以什么结尾
    in 在之内匹配
    Entry.objects.filter(id__in=[1, 3, 4])
    range 在range之内
    end_date = datetime.date(2005, 3, 31)
    Entry.objects.filter(pub_date__range=(start_date, end_date))
    isnull 判断为空
    iregex不区分大小的正则匹配
    Entry.objects.get(title__iregex=r'^(an?|the) +')
    Entry.objects.filter(pub_date__date=datetime.date(2005, 1, 1))
    day 日期
    week    第几周
    week_day    周几
    time    时间
    hour    小时
    minute  分钟
    second  秒
    latest/earliest()时间最新对象
    Entry.objects.latest('pub_date')
    
    first()/last()默认主键排序第一个对象
    p = Article.objects.order_by('title', 'pub_date').first()
    
    ***统计
    Count(expression, distinct=False, **extra)
    Max(expression, output_field=None, **extra)
    Min(expression, output_field=None, **extra)
    Sum(expression, output_field=None, **extra)
    
    
    F表达式
    支持对F()对象进行加、减、乘、除、取模以及幂运算等算术操作
    from django.db.models import F
    Entry.objects.filter(rating__lt=F('n_comments') + F('n_pingbacks'))
    支持.bitand()、.bitor()、.bitrightshift()和.bitleftshift()4种位操作
    F('somefield').bitand(16)
    
    原生SQL语句中%符号有特殊的作用。Django帮你自动转义了百分符号和下划线
    Entry.objects.filter(headline__contains='%')
    SELECT ... WHERE headline LIKE '%\%%';
    
    Q来自django.db.models.Q,用于封装关键字参数的集合,可以作为关键字参数用于filter、exclude和get等函数
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    相关文章

      网友评论

          本文标题:_姜2

          本文链接:https://www.haomeiwen.com/subject/xrmmeftx.html