69.ORM查询条件:isnull和regex的使用
2024-09-05 09:30:15
首先查看数据库中的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 %中国%
最新文章
- Hadoop的体系结构
- [RT][NOIP2015]联合权值
- golang笔记——流程控制
- 2016.12.01 搭建dendroid备忘
- Git学习笔记(8)——标签管理
- 您的 PHP 似乎没有安装运行 WordPress 所必需的 MySQL 扩展”处理方法
- Unity3D 实现简单的语音聊天 [iOS版本]
- NSQ:分布式消息队列学习记录
- PHP根据身份证号码验证、获取星座、生肖和性别函数
- SQL Server Reporting Services (SQLEXPRESS) 服务占用80端口
- (SQL SERVER) (ORACLE) (ACCESS)(POSTGRE SQL)四种数据库操作C#代码
- 038_nginx backlog配置
- Java8将List转为Map
- filter in Servlet
- oracle中的trim()函数详解
- OpenStack API部分高可用配置(二)
- JERSEY中文翻译(第三章、模块和依赖)
- Node.js(daemon),tweak(debug ES)/nodejs forever,supervisor--express
- Eclipse (JavaEE版)中修改web项目的访问路径
- C# winform中listview排序
热门文章
- Mongoose使用
- Day7 - K - Biorhythms POJ - 1006
- 关于无法下载sklearn中的MNIST original数据集的问题
- python正则表达式匹配多行
- UVA - 10129 Play on Words(欧拉回路)
- STM32初始
- redis报错MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist
- Typecho博客添加版权说明
- XPath--快速获取XML数据的节点或属性
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-volume-down