django查询常用操作符

以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")

时间: 2024-08-01 06:24:47

django查询常用操作符的相关文章

Redis 怎么实现保存Django 查询集

我们在用Python Django开发秒杀系统的时候,要将Django 查询到商品详细信息保存到Redis缓存中去,但Redis不能直接保存对象,但有什么方法呢? 我们发现可用Python的pickle模块. pickle模块可以序列化对象并保存到磁盘中,并在需要的时候读取出来,任何对象都可以执行序列化操作. Pickle模块中最常用的函数为: 1.pickle.dumps(obj[, protocol]) 函数的功能:将obj对象序列化为string形式,而不是存入文件中. 参数讲解: obj

Django中常用字段

一.Djiango框架的常用字段 Django ORM 常用字段和参数 常用字段 常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647.(一般不用它来存手机号(位数也不够),直接用字符串存,) CharField 字符类型,必须提供max_length参数, max_length表示字符长度. 这

Django ORM常用字段及参数

目录 Django ORM常用字段及参数 models中的常用字段 字段内的关键字参数 数据库查询优化(面试问题) Django ORM如何开启事务操作 MTV与MVC模型(了解) Django ORM常用字段及参数 models中的常用字段 models中常用字段与数据库中的对应关系 models中常用字段 数据库对应字段 AutoField(primary_key=True) 主键字段 CharField(max_length=32) varchar(32) IntegerField() i

python 判断文件和文件夹是否存在的方法 和一些文件常用操作符

1.判断文件和文件夹是否存在及创建 import os #os.path.exists(dir_path/file_path) 判断内容是否存在 >>>os.path.exists('/home/mologa') True #os.path.isfile(file_path) 判断文件是否存在且是文件类型 >>>os.path.isfile('/home/mologa/a.log') False #os.path.isdir(dir_path) 判断文件夹是否存在 &g

Django 查询时间段 时间搜索 过滤

Django 查询时间段 1.大于某个时间 gt now = datetime.datetime.now()start = now – datetime.timedelta(hours=23, minutes=59, seconds=59)a=yourobject.objects .filter(youdatetimcolumn__gt=start) 大于等于某个时间:gte 查询的时候用a=yourobject.objects .filter(youdatetimcolumn__gte=sta

Django查询 – id vs pk

当编写django查询时,可以使用id / pk作为查询参数. Object.objects.get(id=1) Object.objects.get(pk=1) pk代表主键(primary key),pk更加独立于实际的主键字段,即您不必关心主键字段是否被称为id或object_id或任何. 如果您具有不同主键字段的模型,它还可以提高您的一致性. 转载:https://codeday.me/bug/20170509/14672.html 原文地址:https://www.cnblogs.co

Django中常用的那些模块路径

Django中常用的那些模块路径 from django.shortcuts import HttpResponse, render, redirect from django import template from django.conf.urls import url from django.urls import path from app01 import views from django.conf.urls import include, url from django.urls

Django - - 基础 - - Django ORM常用查询语法及进阶

目录 一般操作 必知必会13条 单表查询之神奇的双下划线 ForeignKey操作 正向查找 反向操作 ManyToManyField class RelatedManager 聚合查询和分组查询 聚合 分组 F查询和Q查询 F查询 Q查询 锁和事务 锁 事务 其他鲜为人知的操作(有个印象即可) Django ORM执行原生SQL QuerySet方法大全 Django终端打印SQL语句 在Python脚本中调用Django环境 1, 一般操作 官网文档:https://docs.djangop

django下常用查询的API

django.db.models.query.QuerySet QuerySet的特点:1.是可迭代2.可切片 查询相关的API:1.get(**kwargs):返回与所给的筛选条件相匹配的对象,返回结果有且只有一个.如果符合筛选条件的对象超过一个,就会抛出MultipleObjectsReturned异常,如果没有找到符合筛选条件的对象,就会抛出DoesNotExist异常.2.all():查询所有结果3.filter(**kwargs):包含了与所给的筛选条件相匹配的对象4.exclude(