码迷,mamicode.com
首页 > 其他好文 > 详细

django查询常用操作符

时间:2014-08-25 22:44:15      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   for   ar   数据   div   log   

以Publisher、Author、Book的model为例子

#coding=utf-8
from django.db import models

# Create your models here.
class Publisher(models.Model):
    name=models.CharField(max_length=30)
    address=models.CharField(max_length=50)
    city=models.CharField(max_length=60)
    state_province=models.CharField(max_length=30)
    country=models.CharField(max_length=50)
    website=models.URLField()
    #可以在object中看到name信息
    def __unicode__(self):
        return self.name
    #直接排序,每次查询出来的都按name来默认排序
    class Meta:
        ordering = [name]
class Author(models.Model):
    first_name=models.CharField(max_length=30)
    last_name=models.CharField(max_length=40)
    email=models.EmailField()
    def __unicode__(self):
        return self.first_name+self.last_name
class Book(models.Model):
    title=models.CharField(max_length=100)
    authors=models.ManyToManyField(Author)
    publisher=models.ForeignKey(Publisher)
    publication_date=models.DateField()
    def __unicode__(self):
        return self.title

如下:

1、Publisher.objects.all() 查询全部字段信息。

2、Publisher.objects.filter(name="xx",country="xx") 查询name和country符合的Publisher对象数组。

3、Publisher.objects.filter(name__contains="xx") 查询name中存在指定项的Publisher对象数组。

4、Book.objects.filter(authors__first_name__exact="xx") 查询Book中authors的first_name为指定项的对象数组。exact是精确查询。上面的contains是包含查询。都可以进行关系联查,可以一直联查下去。注意双下划线“__”。

5、Publisher.objects.get(name="xx") 查询name符合指定项的publisher对象,注意这里不是数组,是一个对象。如果查询中出现多个或没有对象将抛出异常。可以根据异常进行捕捉来处理。如:

try:
    p = Publisher.objects.get(name=Apress)
except Publisher.DoesNotExist:
    print "Apress isn‘t in the database yet."
else:
    print "Apress is in the database."

6、Publisher.objects.order_by("xx","xx") 查询按指定项排列后的publisher对象数组。逆向排序可以Publisher.objects.order_by("-xx")

7、Publisher.objects.exclude(name="xx") 查询除了指定name的publisher对象数组。

8、Publisher.objects.create(name="xx",address="xxxx") 插入name和address到publisher中。也可以分两步:

  p1=Publisher(name="xx",address="xxxx")   

  p1.save() 没有save()的将不会插入数据库。获取到p1对象后可以直接p1.name="xxx"来改name,然后记得p1.save()才会存入数据库。

9、PUblisher.objects.filter(id=1).update(name="xxx") 这直接修改了id=1的name值,返回更新数量,比上面的形式好。

10、Publisher.objects.filter(country="xx").delete() 删除指定数据。

11、Publisher.objects.order_by(‘name‘)[0] 只取第一个publisher对象。不支持负索引,不过可以Publisher.objects.order_by(‘-name‘)[0] 

  publisher.objects.order_by(‘name‘)[1:3] 从前3个publisher对象中取第二个及以后的所有对象,这样就去到了2个对象的数组。

连锁查询:

  Publisher.objects.filter(country="xx").order_by("-name")

 

django查询常用操作符

标签:style   blog   color   io   for   ar   数据   div   log   

原文地址:http://www.cnblogs.com/zhaojia-dream/p/3935748.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!