模板:

 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查询条件的更多相关文章

  1. 67.ORM查询条件:range的使用,使用make_aware将navie time 转换为aware time

    模型的定义,models.py文件中示例代码如下: from django.db import models # 在定义模型的类时,一定要继承models.Model class Category(m ...

  2. 68.ORM查询条件:date,time,year,week_day等

    1. date: 首先查看数据库中article表的信息,由表中的create_time字段可以看出时间为2020.2.5 打印出查询的结果: <QuerySet []>:但是查询的结果为 ...

  3. 69.ORM查询条件:isnull和regex的使用

    首先查看数据库中的article表的数据: 定义模型的文件models.py中的示例代码如下: from django.db import models class Category(models.M ...

  4. 64.Python中ORM查询条件:in和关联模型

    定义模型的models.py文件中示例代码如下: from django.db import models class Category(models.Model): name = models.Ch ...

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

    1. gte: 代表的是大于等于,英文全称为:great than equal.举例:找到文章id大于等于3等文章,示例代码如下: 定义模型的示例代码如下: from django.db import ...

  6. django orm 的查询条件

    Django的ORM查询操作: 查询数据库操作是一个非常重要的技术.在Django中,查询一般就是使用filter.exclude.get三个方法来实现,在调用这些方法的时候传递不同的查询条件来实现复 ...

  7. django ORM常用查询条件

    假设有一个模型 class Article(models.Model): title=models.CharField(max_length=50) content=models.TextField( ...

  8. Django 的 orm 查询

    一.模型关系表 1. 一对一 Author-AuthorDetail 关联字段可以在任意表下,但必须唯一约束.(unique约束) ad_id(unique约束) ad = models.oneToO ...

  9. Django(ORM查询2)

    day70 ORM训练专题 :http://www.cnblogs.com/liwenzhou/articles/8337352.html 内容回顾     1. ORM         1. ORM ...

随机推荐

  1. python文档-基本API命令翻译及使用方法!

    1.使用tkinter.Tk() 生成主窗口(window=tkinter.Tk()): window.title('标题名')         修改框体的名字,也可在创建时使用className参数 ...

  2. MySQL数据库报错pymysql.err.InterfaceError: (0, '')

    今天入库的时候出现了报错pymysql.err.InterfaceError: (0, ''),经过排查,发现是由于把连接数据库的代码放到了插入函数的外部,导致多线程运行出错 def write_in ...

  3. Java编程基础篇第四章

    循环结构 循环结构的分类 for循环,while循环,do...while()循环 for循环 注意事项: a:判断条件语句无论简单还是复杂结果是boolean类型 b:循环体语句如果是一条语句,大括 ...

  4. mysql5.7.17安装配置图文教程

    My SQL的特点: MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,M ...

  5. STL算法总览(部分)

    下图将所有的STL算法(以及一些非标准的SGI STL算法)的名称.用途.文件分布等等,依算法名称的字母顺序列表.表格中凡是不在STL标准规格之内的SGI专属算法,都以 * 加以表示. 注:以下“质变 ...

  6. pytorch 中的重要模块化接口nn.Module

    torch.nn 是专门为神经网络设计的模块化接口,nn构建于autgrad之上,可以用来定义和运行神经网络 nn.Module 是nn中重要的类,包含网络各层的定义,以及forward方法 对于自己 ...

  7. JAVA第三周学习总结

    20175303 2018-2019-2 <Java程序设计>第三周学习总结 教材学习内容总结 •编程语言的发展分为三个阶段,分别是:面向机器,面向过程,面向对象的语言.Java属于面向对 ...

  8. AngularJS实现可伸缩的页面切换

    AngularJS实现可伸缩的页面切换 AngularJS 1.2 通过引入基于纯CSS class的切换和动画,在一个单页面应用创建页面到页面的切换变得更加的容易.只需要使用一个ng-view,让我 ...

  9. REST风格的5条关键原则

    REST风格的5条关键原则包括: (1)网络上的所有事物都被抽象为资源. (2)每个资源对应一个唯一的资源标识. (3)通过通用的连接件接口对资源进行操作. (4)对资源的各种操作不会改变资源标识. ...

  10. Linux之SSH免密登录

    实验方法: 开启两台虚拟机A和B,IP地址分别为192.168.222.12.192.168.222.10 在虚拟机A下做如下操作,生成公钥和密钥: [root@localhost ~]# ssh-k ...