定义模型的models.py文件中示例代码如下:
from django.db import models

class Category(models.Model):
name = models.CharField(max_length=100) class Meta:
db_table = 'category' class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
category = models.ForeignKey('Category', on_delete=models.CASCADE, null=True) def __str__(self):
return "<(Article: id: %s,title: %s, content: %s)>" % (self.id, self.title, self.content) class Meta:
db_table = 'article'
1.in:查找某个字段的数据是否在某个集合中。示例代码如下:
from django.http import HttpResponse
from .models import Article, Category def index(request):
# 查找id为1,2,3的文章
articles = Article.objects.filter(id__in=[1,2,3])
for article in articles:
print("%s, %s, %s"%(article.id, article.title, article.content))
# 1, Hello, 你好
# 2, Hello World, 大家好
# 3, 钢铁是怎样炼成的, 你好 # 打印出sql语句:
print(articles.query)
# SELECT `article`.`id`, `article`.`title`, `article`.`content` FROM `article` WHERE `article`.`id` IN (1, 2, 3)
return HttpResponse("success")
2. in: 查找另一张表中的字段是否在某个集合中。查找id为1,2,3的文章的分类,示例代码如下:
def index(request):
# in:查找id为1,2,3的文章的分类
# 涉及到两个表
# 父表Category可以通过子表名字的小写形式进行访问子表,同样如果不想使用默认的名字进行访问,
# 可以在指定外键的时候指定参数related__query__name='articles',之后就可以通过articles进行访问子表了。
categorys = Category.objects.filter(article__id__in=[1,2,3]) # 如果你判断的模型的字段就是模型的主键,那么就可以使用article__in
categorys = Category.objects.filter(article__in=[1,2,3]) for category in categorys:
print("%s, %s"%(category.id, category.name))
# 1, 最新文章
#
# 2, 最热文章
# 3, 高评分文章
print(categorys.query)
# SELECT `category`.`id`, `category`.`name` FROM `category` INNER JOIN `article` ON (`category`.`id` = `article`.`category_id`) WHERE `article`.`id` IN (1, 2, 3)
return HttpResponse("success")
3. 查找标题中包含“hello”的文章的分类,示例代码如下:
 # 查找标题中包含“hello”的文章的分类
# 首先将标题中包含hello的文章查询出来
articles = Article.objects.filter(title__icontains="hello")
# 之后查找这些文章的分类
categorys = Category.objects.filter(article__id__in=articles)
for category in categorys:
print(category)
# Category object (1)
# Category object (2) print(categorys.query)
# SELECT `category`.`id`, `category`.`name` FROM `category` INNER JOIN `article` ON (`category`.`id` = `article`.`category_id`) WHERE `article`.`id` IN (SELECT U0.`id` FROM `article` U0 WHERE U0.`title` LIKE %hello%)
return HttpResponse("success")

总结:1. 在父表(category)对子表(article)进行反向查询的时候,默认情况下可以通过子表名字的小写形式进行查询。如果不想使用默认的,同样可以在定义外键的时候,指定参数related_query_name='articles',之后就可以使用articles进行反向查询子表了。

2. 父表对子表进行反向引用,默认情况下可以通过“子表的名字的小写形式_set”进行反向引用。如果不想使用默认的这种形式,同样可以在定义外嫁的时候指定参数related_name='articles',之后就可以通过articles进行反向引用了。

64.Python中ORM查询条件:in和关联模型的更多相关文章

  1. hibernate中带查询条件的分页

    所谓分页,从数据库中分,则是封装一个分页类.利用分页对象进行分页. 但,分页往往带查询条件. 分页类的三个重要数据:[当前页码数],[数据库中的总记录数],[每页显示的数据的条数] 原理:select ...

  2. exp导出一个表中符合查询条件的数据

    原文地址:exp导出一个表中符合查询条件的数据 作者:charsi 导出一个表中的部分数据,使用QUERY参数,如下导出select * from test where object_id>50 ...

  3. Python学习---ORM查询之基于对象的正向/反向/聚合/分组/Q/F查询

    ORM查询之基于对象的正向查询与反向查询 对象形式的查询 # 正向查询 ret1=models.Book.objects.first() print(ret1.title) print(ret1.pr ...

  4. Python - Django - ORM 查询方法

    models.py: from django.db import models class Human(models.Model): id = models.AutoField(primary_key ...

  5. 48.Python中ORM模型实现mysql数据库基本的增删改查操作

    首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.my ...

  6. ORM查询条件

    模板: from django.db import models class Article(models.Model): title = models.CharField(max_length=20 ...

  7. 67.ORM查询条件:range的使用,使用make_aware将navie time 转换为aware time

    模型的定义,models.py文件中示例代码如下: from django.db import models # 在定义模型的类时,一定要继承models.Model class Category(m ...

  8. 69.ORM查询条件:isnull和regex的使用

    首先查看数据库中的article表的数据: 定义模型的文件models.py中的示例代码如下: from django.db import models class Category(models.M ...

  9. python中orm框架学习

    安装sqlalchemy pip3 install sqlalchemy 创建表结构: from sqlalchemy import Column,String,create_engine from ...

随机推荐

  1. 使用Spring JMS轻松实现异步消息传递

    异步进程通信是面向服务架构(SOA)一个重要的组成部分,因为企业里很多系统通信,特别是与外部组织间的通信,实质上都是异步的.Java消息服务(JMS)是用于编写使用异步消息传递的JEE应用程序的API ...

  2. 最新获取 QQ头像 和 昵称接口

    网上找来的测试可用... 获取QQ头像 http://q2.qlogo.cn/headimg_dl?bs=QQ号&dst_uin=QQ号&dst_uin=QQ号&;dst_ui ...

  3. P1066 图像过滤

    P1066 图像过滤 转跳点:

  4. 2-10 就业课(2.0)-oozie:5、通过oozie执行hive的任务

    4.2.使用oozie调度我们的hive 第一步:拷贝hive的案例模板 cd /export/servers/oozie-4.1.0-cdh5.14.0 cp -ra examples/apps/h ...

  5. Manacher算法[O(n)]

    问题描述: 输入一个字符串,求出其中最大的回文子串.子串的含义是:在原串中连续出现的字符串片段.回文的含义是:正着看和倒着看相同,如abba和yyxyy. 算法基本要点: 首先用一个非常巧妙的方式,将 ...

  6. GoJS、AngularJS自定义组件JS SDK注解参考

    通常一个SDK包含一个或多个API 下面是一个SDK的实例: if (typeof(wlNgApp) === "undefined") wlNgApp = angular.modu ...

  7. R Akaike information criterion,AIC,一个越小越好的指标

    Akaike information criterion,AIC是什么?一个用来筛选模型的指标.AIC越小模型越好,通常选择AIC最小的模型.第一句话好记,第二句话就呵呵了,小编有时候就会迷惑AIC越 ...

  8. 017、MySQL取第4本季度开始和结束日期

    #取第4本季度开始和结束日期 SELECT QUARTER ( adddate( dy, ) ) QTR, date_add( dy, INTERVAL MONTH ) Q_start, adddat ...

  9. windows上使用git

    开始的时候同事只给了一个地址,类似这样:git@111.111.1.1:ABCDEF (1)如何在Windows上使用Git 有一篇博客不错:http://www.tuicool.com/articl ...

  10. canvas绘制表盘时钟

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...