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)
create_time = models.DateTimeField(auto_now_add=True,null=True) # 保存时获取当前时间
class Meta:
db_table = 'article'
def __str__(self):
return "<Article: ID:%s,title:%s,content:%s>" % (self.id,self.title,self.content) class Category(models.Model):
name = models.CharField(max_length=100)
class Meta:
db_table = 'category'
视图导入:
from django.shortcuts import render
from .models import Article,Category
from django.http import HttpResponse
from datetime import datetime,time,date
from django.utils.timezone import make_aware def...
数据库内容:
- 使用filter返回QuerySet数据集类型,可调用方法.query;使用get返回一个模型时,不能使用该方法;
- QuerySet.query:‘query’可用来查看这个‘ORM’查询语句最终被翻译成的‘SQL’语句;
- exact/iexact:查找的与原内容完全相等时才能被找到,只是like与=的区别,多数情况下是一样的,可直接省略‘__exact’;
def index(requset):
article = Article.objects.filter(title__exact='三国演义')
article = Article.objects.filter(title__iexact='三国演义')
print(article.query)
print(type(article))
return HttpResponse('success')
# >>> SELECT `article`.`id`, `article`.`title`, `article`.`content` FROM `article` WHERE `article`.`title` = 三国演义
# >>> SELECT `article`.`id`, `article`.`title`, `article`.`content` FROM `article` WHERE `article`.`title` LIKE 三国演义
# <class 'django.db.models.query.QuerySet'> - contains/icontains:只要包含有查找的内容就能被找到;
def index1(request):
result = Article.objects.filter(title__contains='hello')
print(result.query)
return HttpResponse('success')
# 使用contains区分大小写,icontains不区分;
# SELECT `article`.`id`, `article`.`title`, `article`.`content` FROM `article` WHERE `article`.`title` LIKE BINARY %hello% - in:查找in中所包含的内容
def index2(requset):
# 1、查找id为1,2,3的文章
articles = Articel.objects.filter(id__in=[1,2,3])
for article in articles:
print(article) # 2、查找文章id为1,2,3的分类;'__id'可省略;article_in中的‘article’反向查询可用‘related_query_name’改名,
# 类似于‘related_name’的用法,改后仍需加‘__in’;
category = Category.objects.filter(articel__id__in=[1,2,3]) # 查找所有包含hello的分类
articles = Article.objects.filter(title__icontains='hello')
categorys = Category.objects.filter(article__in=articles)
for category in categorys:
print(category)
return HttpResponse('success') - gt/gte、lt/lte:大于/大于等于、小于/小于等于;(greater/lower than equal)
article = Article.objects.filter(id__gt=2)
# startswith/endswith:以什么开头或结尾,前面加‘i’表不区分大小写;
articles = Article.objects.filter(title__startswith='hello')
return HttpResponse('success') - range:需指定时间段,时间应标记为‘aware’时间。(make_aware(value,timezone=None,is_dst=None):没有传入时区时,将获取当前的时区:timezone = get_current_timezone();即获取settings.py中‘TIME_ZONE = 'Asia/Shanghai'’设置的时区;)
def index5(requset):
start_time = make_aware(datetime(year=2019,month=3,day=7,hour=15,minute=0,second=0))
end_time = make_aware(datetime(year=2019,month=3,day=7,hour=16,minute=0,second=0))
articles = Article.objects.filter(creat_time__range=(start_time,end_time))
print(articles.query)
print(articles)
return HttpResponse('success') - DATE:将create_time的datetime类型转换为DATE的类型;
def index6(request):
article = Article.objects.filter(create_time__date=date(year=2019,month=3,day=7))
print(article.query)
print(article)
return HttpResponse('success')# CONVERT_TZ:将时间从UTC的时区转换为Asia/Shanghai的时区;因MySQL本身不具备这些时区的信息,所以相当于
# 转换失败,需将具有该信息的文件拷贝进mysql中。
# 在官网https://dev.mysql.com/downloads/timezones.html中下载文件timezone_2018i_posix.zip - POSIX standard解压后拷贝覆盖
# 到:C:\ProgramData\MySQL\MySQL Server 5.7\Data\mysql 路径下(先将原文件保存);
# 后重启数据库,使用命令:set stop/start [mysql数据库名] 进行重启(可在服务中查看数据库名字);
# Linux或Mac中執行命令:mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -D mysql -u root -p 密码;(数据库,用户,密码)
# 错误输出:<QuerySet []>
# 正常输出:
# SELECT `article`.`id`, `article`.`title`, `article`.`content`, `article`.`category_id`, `article`.`create_time` FROM
# `article` WHERE DATE(CONVERT_TZ(`article`.`create_time`, 'UTC', 'Asia/Shanghai')) = 2019-03-07
# <QuerySet [<Article: <Article: ID:1,title:西游记,content:abc...>>,<Article: <Article: ID:2,title:三国演义,content:123...>>, <Article: <Article: ID:3,title:Hello world,content:xxx>>,<Article: <Article: ID:4,title:英文单词:hello,content:aaa>>, <Article: <Article: ID:5,title:红楼梦,content:aaa...>>]>def index7(request):
# 查找某个时间的数据,因秒(second)需精确到小数位,所以用range方法;
# article = Article.objects.filter(create_time__time=time(hour=15, minute=29, second=15))
start_time = time(hour=15,minute=29,second=15)
end_time = time(hour=15,minute=29,second=16)
article = Article.objects.filter(create_time__time__range=(start_time,end_time))
print(article)
return HttpResponse('success') - regex:使用正则表达式
def index8(request):
# regex 表示区分大小写
articles = Article.objects.filter(title__iregex=r"^hello")
print(articles)
ORM查询条件的更多相关文章
- 67.ORM查询条件:range的使用,使用make_aware将navie time 转换为aware time
模型的定义,models.py文件中示例代码如下: from django.db import models # 在定义模型的类时,一定要继承models.Model class Category(m ...
- 68.ORM查询条件:date,time,year,week_day等
1. date: 首先查看数据库中article表的信息,由表中的create_time字段可以看出时间为2020.2.5 打印出查询的结果: <QuerySet []>:但是查询的结果为 ...
- 69.ORM查询条件:isnull和regex的使用
首先查看数据库中的article表的数据: 定义模型的文件models.py中的示例代码如下: from django.db import models class Category(models.M ...
- 64.Python中ORM查询条件:in和关联模型
定义模型的models.py文件中示例代码如下: from django.db import models class Category(models.Model): name = models.Ch ...
- 65.ORM查询条件:gte,gt,lte和lt的使用
1. gte: 代表的是大于等于,英文全称为:great than equal.举例:找到文章id大于等于3等文章,示例代码如下: 定义模型的示例代码如下: from django.db import ...
- django orm 的查询条件
Django的ORM查询操作: 查询数据库操作是一个非常重要的技术.在Django中,查询一般就是使用filter.exclude.get三个方法来实现,在调用这些方法的时候传递不同的查询条件来实现复 ...
- django ORM常用查询条件
假设有一个模型 class Article(models.Model): title=models.CharField(max_length=50) content=models.TextField( ...
- Django 的 orm 查询
一.模型关系表 1. 一对一 Author-AuthorDetail 关联字段可以在任意表下,但必须唯一约束.(unique约束) ad_id(unique约束) ad = models.oneToO ...
- Django(ORM查询2)
day70 ORM训练专题 :http://www.cnblogs.com/liwenzhou/articles/8337352.html 内容回顾 1. ORM 1. ORM ...
随机推荐
- 面向对象编程之Java多态
我相信从学习计算机面向对象编程起就很多人背下了继承.封装.多态三个特性,可是多态并不是那么好理解的.通常做几道题,背下几次多态的动态绑定规律,可是依旧在一段时间后忘记了多态的存在,为什么要多态,这个程 ...
- 特殊字符url编码以后再解码后出现错误(¬ , ¢, ¤, £)
Url编码的原内容是 “¬ify_url=xxxx” 经过url编码以后再解码回来 “¬”的部分就变成了“¬” 解决方案:把原文里面待url编码的&符号先替换成 ...
- Spark Streaming实战演练
一.spark streaming简介 Streaming是一种数据传输技术,它把客户机收到的数据变成一个稳定连续的流,源源不断的输出,使用户听到的声音和图像十分稳定,而用户在整个文件传输完成开始前就 ...
- 大数据和Hadoop时代的维度建模和Kimball数据集市
小结: 1. Hadoop 文件系统中的存储是不可变的,换句话说,只能插入和追加记录,不能修改数据.如果你熟悉的是关系型数据仓库,这看起来可能有点奇怪.但是从内部机制看,数据库是以类似的机制工作,在一 ...
- 数据格式XML、JSON详解
一. XML数据格式 1.1 XML的定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类 ...
- group_concat的使用
1.场景 仓库使用系统实现了先进先出,给仓库的备货单原先设计如下模式: tx3表: 不同的批次分开行显示,仓库从这个备货单可以知道这个货品需要备货哪些批次,多少数量 用了几天,仓库对此备货单样式提出如 ...
- linux 单次定时任务
使用at =======查看当前任务========= at -l 或者atq =======查看任务执行什么===== at -c =======配置任务========= at 02:00 ...
- rosetta对称性文件(rosetta symmetry file)的产生及应用
针对对称性PDB 3UKM,使用make_symmdef_file.pl脚本,可以执行产生对称单元及对称文件: $> $ROSETTA3/src/apps/public/symmetry/mak ...
- sessionid固定与session混淆的一些随想
以前一直觉得sessionid固定和session混淆就是两个一样的东西,后来发现两者还是要分开来的,主要因为利用场景的不同!!! sessionid固定和session混淆还是需要区分开来的一般情况 ...
- Eclipse集成scala插件
1.Eclipse中右击help,选择Eclipse Marketplace,搜索scala,一路点击安装,重启Eclipse. 2.新建工程,new->other->出现scala wi ...