64.Python中ORM查询条件:in和关联模型

定义模型的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进行反向引用了。

原文地址:https://www.cnblogs.com/guyan-2020/p/12261764.html

时间: 2024-07-29 18:44:52

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

hibernate中带查询条件的分页

所谓分页,从数据库中分,则是封装一个分页类.利用分页对象进行分页. 但,分页往往带查询条件. 分页类的三个重要数据:[当前页码数],[数据库中的总记录数],[每页显示的数据的条数] 原理:select * from  [表名] where   [字段名]  like   ['%条件%']    limit  [开始查询的索引],[每页显示的数据] 带查询条件的分页分两步 (1)第一步:查询出符合条件的数据的总条数 ---->select count(*) from [表名] where  [字段

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

原文地址:exp导出一个表中符合查询条件的数据 作者:charsi 导出一个表中的部分数据,使用QUERY参数,如下导出select * from test where object_id>50000这个条件中的数据exp charsi/[email protected] tables=(TEST) query="'where object_id>50000'" file=aaa.dmp log=aaa.log 其他参数含义:GRANTS:指定是否导出对象的授权信息,默认参

065:ORM查询条件详解-gt、gte、lt和lte

ORM查询条件详解-gt.gte.lt和lte: 1.gt:某个 field 的值要大于给定的值.示例代码如下: articles = Article.objects.filter(id__gt=3) 以上代码的意思是将所有 id 大于4的文章全部都找出来.将翻译成以下 SQL 语句: SELECT `article`.`id`, `article`.`title`, `article`.`content`, `article`.`category_id` FROM `article` WHER

Python - Django - ORM 查询方法

models.py: from django.db import models class Human(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) age = models.IntegerField() birthday = models.DateField(auto_now_add=True) 在数据库中添加几条数据 在 Python 脚本中调用 Dj

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

首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'orm_intro_dem', 'USER': 'root', 'PASSWORD': 'root', 'HOST': '127.0.0.1', 'PORT': '3306', } } 之后将创建的app添加到settings.py文件中的INSTALLED_APPS中

062:ORM查询条件详解-exact和iexact

查询操作: 查找是数据库操作中一个非常重要的技术.查询一般就是使用filter.exclude以及get三个方法来实现.我们可以在调用这些方法的时候传递不同的参数来实现查询需求.在 ORM 层面,这些查询条件都是使用 field + __ + condition 的方式来使用的.以下将那些常用的查询条件来一一解释. 查询条件exact和iexact: exact: 使用精确的 = 进行查找.如果提供的是一个 None ,那么在 SQL 层面就是被解释为 NULL .示例代码如下: article

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

首先查看数据库中的article表的数据: 定义模型的文件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)

翻页过程中保存查询条件

例如:我的查询条件是 1 <table> 2 <tr> 3 <td> 4 <input type="text" name="goodsNo"/>- 7 </td> 8 <td> 9 <input type="text" name="goodsName"/> 12 </td> 13 <td><input type=&

MongoDB中关于查询条件中包括集合中字段的查询

要查询的数据结构例如以下: 以查询当中的versionLimitList字段为例 MongoOperations工具类查询相关语句 <pre name="code" class="java">Criteria criteria1 = Criteria.where("validStartTime").gt(new Date()). and("versionLimitList").elemMatch (Criteria