• django model操作


    django model 类型说明:https://docs.djangoproject.com/en/1.8/ref/models/fields/

    1.django model查询

       1.Person.objects.raw("select * from myapp_person")             # preson为model名 返回多个model实例 可以用for model in models 来提取一个实例 

    for p in Person.objects.raw('SELECT * FROM myapp_person'):
        print(p)
    a =Person.objects.raw('SELECT * FROM myapp_person')[0] # index使用 会查询数据库
    a = Person.objects.raw('SELECT * FROM myapp_person WHERE last_name = %s', [lname])  # 参数使用

        2.filter方法,相当于简单的where语句 ,返回model对象    Article.objects.filter(reporter__first_name='John')

        3.get方法,相当于简单的where语句  ,返回model对象      Blog.objects.get(name="Cheddar Talk")  如果有0个或者超过一个的数据,将会报错

        4.all方法,相当于select * from table,返回表中所有tuple

        5.exclude方法,选择表中不满足条件的tuple   q = q.exclude(body_text__icontains="food")

        6.delete方法,Entry.objects.all().delete()

        7.update方法 Entry.objects.filter(blog__name=‘foo‘).update(comments_on=False) 注意不能修改关联表的字段

    2.创建model对象,并保存到数据库

    from blog.models import Blog
    b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
    b.save()

    3.改变model对象,并保存

    b5.name = 'New name'
    b5.save()

    4. python slice分片在其中的应用 Entry.objects.all()[:10:2]

    5 order_by方法:Entry.objects.order_by('headline')[0] 或者Entry.objects.order_by('-headline')倒序

           

    6 contains匹配 相当于like   也有忽略大小写的匹配 icontains

    # Case-sensitive containment test. For example:
    
    Entry.objects.get(headline__contains='Lennon')  # 注意是双下划线
    # Roughly translates to this SQL:
    
    SELECT ... WHERE headline LIKE '%Lennon%';

    7. 忽略大小写匹配 iexact   Blog.objects.get(name__iexact="beatles blog")

    8 startswithendswith  istartswith,iendswith   

    9 外键匹配:Entry.objects.filter(blog__name='Beatles Blog') # 选择entry object where 外键连接的表blog的name属性的值为'Beatles Blog'

    10. 数据表in,gt,lt,gte,lte,range等比较操作:

    # 下面3个操作是等价的  pk表示primary key
    Blog.objects.get(id__exact=14) # Explicit form Blog.objects.get(id=14) # __exact is implied
    Blog.objects.get(pk=14) # pk implies id__exact

    Blog.objects.get(pk=14) Blog.objects.filter(pk__in=[1,4,7]) # pk的值在1,4,7中
    Blog.objects.filter(pk__gt=14) # pk的值大于14

    # range 好似between and操作
    import datetime
    start_date = datetime.date(2005, 1, 1)
    end_date = datetime.date(2005, 3, 31)
    Entry.objects.filter(pub_date__range=(start_date, end_date))
    

      # SQL equivalent:

    SELECT ... WHERE pub_date BETWEEN '2005-01-01' and '2005-03-31';

    11 比较不同的列

        

    from django.db.models import F
    Entry.objects.filter(n_comments__gt=F('n_pingbacks'))  # 选取n_comment大于n_pingbacks的tuple

    12 queryset的缓存系统:当queryset被创建时cache是空的,当第一次queryset被求值时,django会将query result保存到cache中,然后接下来的有关该query result的查询操作会从cache中提取值

       

    queryset = Entry.objects.all()
    print([p.headline for p in queryset]) # Evaluate the query set.
    print([p.pub_date for p in queryset]) # Re-use the cache from the evaluation.

    # 当query set取部分值时,django不会将queryset保存到cache中,从而第二次查询时,会再次查询数据库  
    queryset = Entry.objects.all()
    print queryset[5] # Queries the database
    print queryset[5] # Queries the database again

    queryset = Entry.objects.all()
    [entry for entry in queryset] # Queries the database print queryset[5] # Uses cache print queryset[5] # Uses cache
    # 以下的操作会使得django将result存储到cache中
    [entry for entry in queryset]
    bool(queryset)
    entry in queryset
    list(queryset)
     
     

    13. 利用Q来进行包含或与非的查询,这是对filter的一个扩展,因为filter的参数都是按照与来进行的

    from django.db.models import Q
    Poll.objects.get(
        Q(question__startswith='Who'),
        Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))  # |表示或
    )

    Q(question__startswith='Who') | ~Q(pub_date__year=2005)   # ~表示取反
     



  • 相关阅读:
    2016 年末 QBXT 入学测试
    Codevs 3409 搬礼物
    寻找子串位置
    Balanced Lineup
    统计难题
    爱在心中
    传话
    火柴排队
    新斯诺克
    排序
  • 原文地址:https://www.cnblogs.com/lifeisshort/p/4736237.html
Copyright © 2020-2023  润新知