前提是创建好了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)
来源:oschina
链接:https://my.oschina.net/u/4301418/blog/3343085