Django中model查询

model的增,删,改,查四个操作。

from django.db import models

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def __str__(self):
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=200)
    email = models.EmailField()

    def __str__(self):
        return self.name

class Entry(models.Model):
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    pub_date = models.DateField()
    mod_date = models.DateField()
    authors = models.ManyToManyField(Author)
    number_of_comments = models.IntegerField()
    number_of_pingbacks = models.IntegerField()
    rating = models.IntegerField()

    def __str__(self):
        return self.headline

Creating objects(增加对象)

# 方法一:
>>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
>>> b.save()

# 方法二:
>>> b = Blog.objects.create(name='Beatles Blog', tagline='All the latest Beatles news.')

注意:在方法一,如果没有显示调用.save()方法后,django并不会对数据库进行操作,所有此时数据并没有增加到数据库中。

            方法二直接就在数据库中增加了。

Retrieving objects(查询获取对象)

Blog.objects.API

  • filter( )

返回一个新的符合匹配条件的对象的查询集。

  • get()

返回符合匹配条件的一个对象。

注意:当没有匹配到对象时,会报错;当匹配到的对象大于1个时,也会报错。

当匹配到一个结果时,get() 相当于 filter()[0]

  • exclude()

返回一个新的不符合匹配条件的对象的查询集。

  • order_by()

使用order_by 会覆盖model类Meta选项中的ordering。-表示降序,? 表示乱序,默认表示升序。

Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')

注意:如果想要根据model中一个外键返回指定排序后的查询集。

Entry.objects.order_by('blog')
# 等同于 
Entry.objects.order_by('blog__id')
  • reverse()

将查询结果集降序排列后返回。

  • distinct()

将查询集进行去重操作后返回。正常情况下使用all()方法后的查询集不会存在重复对象(因为主键是唯一的)。

但是当你跨表查询时会用到。

  • values()

将查询结果以字典列表的形式返回。

Blog.objects.filter(name__startswith='Beatles').values()
<QuerySet [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]>

注意:values()方法中可以填入可选的位置参数。表示需要将哪些字段以字典列表的形式返回。

>>> Blog.objects.values('id', 'name')
<QuerySet [{'id': 1, 'name': 'Beatles Blog'}]>
  • values_list()

和上面的values()方法很相像,不过values_list()返回的是元祖列表。

>>> Entry.objects.values_list('id', 'headline')
<QuerySet [(1, 'First entry'), ...]>
  • all()

  • union()

将两个或者多个查询集合并返回。通常情况下,合并只会合并不重复的值。如果重复值也要何在一起,需要设置all=True。

>>> qs1 = Author.objects.values_list('name')
>>> qs2 = Entry.objects.values_list('headline')
>>> qs1.union(qs2).order_by('name')

 

  • count()

返回查询集中的对象个数。

  • first()

返回查询集中第一个对象,如果没有则返回None.如果查询集没有排序,那么使用first()方法会自动根据主键进行排序。

  • last()

  • exists()

查询操作返回结果集中是否存在对象。True或者False。

可以用于判断是否包含成员等等。

  • update()

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值