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)
    content = models.TextField()
    category = models.ForeignKey('Category', on_delete=models.CASCADE, null=True)
    create_time = models.DateTimeField(auto_now_add=True, 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. isunll:判断某个字段的值是否为空。views.py文件中示例代码如下:

from django.http import HttpResponse
from .models import Article

def index2(request):
    # 1.isnull: 查找创建时间create_time是空的文章
    articles = Article.objects.filter(create_time__isnull=True)
    print(articles)
    print(articles.query)

    # 2. isnull: 同样,也可以查找create_time非空的文章
    article = Article.objects.filter(create_time__isnull=False)
    print(article)
    print(article.query)
    return HttpResponse('success!')

2.regex:大小写敏感的判断某字段的值是否满足正则表达式的条件;iregex:大小写不敏感的判断的判断某字段的值是否满足正则表达式的条件。示例代码如下:

def index2(request):
    # 3.regex大小写敏感的正则表达式,
    # 判断以hello开头的字符串
    articles = Article.objects.filter(title__regex=r'^hello')
    print(articles)
    print(articles.query)

    # 4.iregex大小写敏感的正则表达式
    # 判断以hello开头的字符串
    articles = Article.objects.filter(title__iregex=r'^hello')
    print(articles)
    print(articles.query)
    return HttpResponse('success!')
打印出结果:

<QuerySet []>,返回的QuerySet为空。

SELECT article.id, article.title, article.content, article.category_id, article.create_time FROM article WHERE article.title REGEXP BINARY ^hello,需要注意的是,这里django底层执行的sql语句为BINARY 即代表的是区分大小写进行判断。

<QuerySet [<Article: <(Article: id: 1,title: Hello, content: 你好)>>, <Article: <(Article: id: 2,title: Hello World, content: 大家好)>>]>,返回两条满足正则表达式的数据。

SELECT article.id, article.title, article.content, article.category_id, article.create_time FROM article WHERE article.title REGEXP ^hello,这里执行的sql语句为正则表达式匹配^hello,并不区分大小写。

根据关联表进行查询:

两个关联的模型之间可以相互查询,在以下实例中,category为父模型,article模型为子模型,category访问article表,可以通过默认的子模型的名字小写形式进行访问article表。如果不想使用默认的方式进行访问,可以通过在定义外检的时候,指定related_query_name的值来自定义方式。
def index3(request):
    # 查找文章题目中包含中国的文章分类
    # 注意:contains区分大小写判断某字段中的值是否包含某个值
    # 在被翻译成了sql语句的时候会被翻译成LIKE BINARY.
    category = Category.objects.filter(article__title__contains='中国')
    print(category)
    print(category.query)
    return HttpResponse("success!")
打印出结果:

<QuerySet [<Category: Category object (3)>]>

SELECT category.id, category.name FROM category INNER JOIN article ON (category.id = article.category_id) WHERE article.title LIKE BINARY %中国%

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

时间: 2024-11-10 17:44:18

69.ORM查询条件:isnull和regex的使用的相关文章

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

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

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

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.TextF

060~061:ORM查询条件详解-准备工作(pycharm连接数据库)

准备工作,啥也不说了,直接上图说明: 1.每次创建APP和迁移数据库都要打开cmd窗口,有点麻烦:如下界面窗口可以直接使用: 2.pycharm连接MySQL数据库(其中遇到驱动问题:百度一下): 备注:直接打开数据库的表,如果要保存,使用如下按键:crtl + enter 原文地址:https://www.cnblogs.com/zheng-weimin/p/10228992.html

65.ORM查询条件:gte,gt,lte和lt的使用

1. gte: 代表的是大于等于,英文全称为:great than equal.举例:找到文章id大于等于3等文章,示例代码如下: 定义模型的示例代码如下: 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 = m

django orm 的查询条件

Django的ORM查询操作: 查询数据库操作是一个非常重要的技术.在Django中,查询一般就是使用filter.exclude.get三个方法来实现,在调用这些方法的时候传递不同的参数来实现查询需求. 在mysql中,想要查询数据,就需要使用where关键字加上字段条件去查询,在Django的orm之中,我们使用filter.exclude.get关键词加上field+__+condition作为关键词去查询,现在我们就来介绍一下这里的condition: 注:查询原生SQL语句: 1.在q

django ORM常用查询条件

假设有一个模型 class Article(models.Model): title=models.CharField(max_length=50) content=models.TextField() class Meta: db_table='book' 对于查询结果是结果集,即通过filter进行查询所得的对象来说,可通过query属性来查看django转换之后的原生sql语句 -- article=Article.objects.filter(title='Hello World') p

ORM查询简化

文章出处 https://www.cnblogs.com/wupeiqi/articles/6216618.html 字段 常用字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 primary_key=True 注:当model中如果没有自增列,则自动会创建一个列名为id的列 from django.db import models class UserI

应用程序框架实战二十五:查询条件(规约模式应用)

前面已经做了一些准备工作,本篇将介绍查询条件的封装,它是规约模式的一个应用. 规约使用一个对象来封装谓词,我之前已经介绍过它在验证方面的应用,本篇是规约模式在查询方面的应用. 规约的强大之处在于,能够将一堆杂乱无章的条件判断或查询条件封装起来,以一个清晰的概念来表达,并使得这些谓词具备了可复用的能力. 首先在Util.Domains项目的Repositories目录中创建ICriteria接口,这个接口表示一个查询条件,代码如下. using System; using System.Linq.