django-ORM的查询条件
django-ORM的查询条件
前提是创建好了ORM的模型(参照https://www.cnblogs.com/ifdashui/p/11901084.html)
现在数据库中存在下列的数据(以下的查询条件根据这些数据做处理)
在models.py中
# -*- coding: UTF-8 -*- from django.db import models class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() class Meta: db_table = 'article' #更改这个表的名字,映射到数据中的话名称不是Article_article了,是你自定义设置的article
使用下面这两条命令在数据库中映射:(注意进入项目路径以及有虚拟环境的进入虚拟环境)
python manage.py makemigrations
python manage.py migrate
接下来就在views.py中操作即可
在model.py中,创建一个ORM模型
from django.db import models class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() category = models.ForeignKey('Category',on_delete=models.CASCADE,null=True) #关联上这个表 class Meta: db_table = 'article' #更改这个表的名字,映射到数据中的话名称不是Article_article了,是你自定义设置的article
查询条件
然后再views.py中
1.exact 相当于数据库底层的等号 =
from .models import Article def index(request): #1.exact 相当于数据库底层的等号 = # article = Article.objects.filter(title__exact="Hello Word") #相当于数据库底层的 select ··· from ··· where title='Hello World'
2.iexact 相当于数据库底层的 like
#2.iexact 相当于数据库底层的 like # article = Article.objects.filter(title__iexact="Hello Word") #相当于数据库底层 article` WHERE `article`.`title` LIKE Hello Word
3.contains 使用大小写敏感判断,某个字符是否存在指定字符串中,也就是你查找a,数据库中是A,那么就查询不到
#3.contains 使用大小写敏感判断,某个字符是否存在指定字符串中,也就是你查找a,数据库中是A,那么就查询不到 article = Article.objects.filter(title__contains='hello') #即相当于数据库底层的select ··· from ··· where title like '%Hello World%'
4.icontains 使用大小写是不敏感的 也就是你查找a,数据库中是A,那么一样查询得到
#4.icontains 使用大小写是不敏感的 也就是你查找a,数据库中是A,那么一样查询得到 # article = Article.objects.filter(title__icontains='hello') #select ··· from ··· where title like '%Hello World%' 百分号也就是你这个字符串中只要包含相关的数据就都能查询出来
5.in 查询条件是否在给定的范围内,用小括号和中括号都可以
#5.in 查询条件是否在给定的范围内,用小括号和中括号都可以 # articles = Article.objects.filter(id_in=[1,2]) #提取出id=1,id=2中的数据, 相当于数据库底层的select ··· from ··· where id in [1,2] #如何不存在的话就不会提取出来
如果是多表下的查询的话(需要在models.py中,在创建一个表,然后外键关联上这个表)
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=200) content = models.TextField() category = models.ForeignKey('Category',on_delete=models.CASCADE,null=True) #关联上这个表 class Meta: db_table = 'article' #更改这个表的名字,映射到数据中的话名称不是Article_article了,是你自定义设置的article
使用下面这两条命令在数据库中映射:(注意进入项目路径以及有虚拟环境的进入虚拟环境)
python manage.py makemigrations
python manage.py migrate
在views.py下
#多表查询下的操作 categorys = Category.objects.filter(article__id__in=[1,2]) #在article表下找到id为1和2,然后根据这个1和2分类出Category表下的数据,并且可以使用for循环打印出来 for category in categorys: print(category)
#这里为什么是 article ,因为这个张表(Article)使用META反向引用了(也就是给这张表改了个名字),
#直接使用的话模型的名字小写化就行了,不用写成article_set的形式,如果想更改这个默认的方法,在定义外键的时候
#传递related_query_name='自定义名字'
6.gt 找出大于什么什么的数据
#6.gt 找出大于什么什么的数据 articles = Article.objects.filter(id__gt=2) #查询id大于2的所有数据 print(articles)
7.gte 也就是等于的意思
#7.gte 找出大于等于什么的数据 articles = Article.objects.filter(id__gte=2) #查询id大于等于2的所有数据 print(articles)
8.lt 找出小于什么的数据
#8.lt 找出小于什么的数据 articles = Article.objects.filter(id__lt=2) #查询id小于2的所有数据 print(articles)
9.lte 找出小于等什么的数据
#8.lte 找出小于等什么的数据 articles = Article.objects.filter(id__lte=2) #查询id小于等于2的所有数据 print(articles)
10.startswith:以指定某个字符串开始,大小写敏感
#10.startswith:以指定某个字符串开始,大小写敏感 articles = Article.objects.filter(title__startswith='hello') #查询该表下hello为开头的数据,不是hello开头,或者存在大小写的都查询不到 print(articles)
11.istartswith:以指定某个字符串开始,大小写不敏感
#11.istartswith:以指定某个字符串开始,大小写不敏感 articles = Article.objects.filter(title__istartswith='hello') #查询该表下hello为开头的数据,不是hello开头的查询不到,不在乎大小写 print(articles)
12.endswith:查询某个字符串结束的数据,大小写敏感
#12.endswith:查询某个字符串结束的数据,大小写敏感 articles = Article.objects.filter(title__endswith='hello') #查询该表下hello为结尾的数据,如果存在大写,那就查找不出来 print(articles)
13.iendswith:查询某个字符串结束的数据,大小写不敏感
#13.iendswith:查询某个字符串结束的数据,大小写不敏感 articles = Article.objects.filter(title__iendswith='hello') #查询该表下hello为结尾的数据,忽略大小写 print(articles)
14.range:获取某个范围内的数据,即相当于between ··· and ···,用小括号和中括号都可以
这里以获取某个时间段为例
先在models.py中增加一个时间字段
class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() category = models.ForeignKey('Category',on_delete=models.CASCADE,null=True) #关联上这个表 create_time = models.DateTimeField(auto_now_add=True,null=True) #auto_now_add=True 自动获得当前的时间并且设置进去
使用下面这两条命令在数据库中映射:(注意进入项目路径以及有虚拟环境的进入虚拟环境)
python manage.py makemigrations
python manage.py migrate
接着在views.py中
#注意导入需要的库
from datetime import datetime
from django.utils.timezone import make_aware
#14.range:获取某个范围内的数据,即相当于between ··· and ···,用小括号和中括号都可以 #这里以获取某个时间段为例 start_time = make_aware(datetime(year=2019,month=4,day=4,hour=17,minute=0,second=0)) end_time = make_aware(datetime(year=2019,month=4,day=4,hour=18,minute=0,second=0)) articles = Article.objects.filter(create_time__range=(start_time,end_time)) print(articles)
15. date 时间的过滤的查找条件,根据年月日来查询(time、year、week_day等)
articles = Article.objects.filter(create_time__date=datetime(year=2018,month=4,day=4)) #找到符合条件2018-4-4的所有数据 print(articles) return HttpResponse('success')16. isnull 判断某个数据是否为空进行查找
16. isnull 判断某个数据是否为空进行查找
#16. isnull 判断某个数据是否为空进行查找 articles = Article.objects.filter(create_time__isnull=True) #获取该create_time字段下为空的数据 print(articles)
17. regex 使用正则查询数据,大小写敏感
#17. regex 使用正则查询数据,大小写敏感 articles = Article.objects.filter(title__regex=r'^hell') #获取该title字段下为开头为hell的数据,区分大小写 print(articles)
18. iregex 使用正则查询数据,不区分大小写
#18. iregex 使用正则查询数据,不区分大小写 articles = Article.objects.filter(title__iregex=r'^hell') #获取该title字段下开头为为hell的数据,不区分大小写 print(articles)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现