zoukankan      html  css  js  c++  java
  • ORM查询条件

    模板:

     1 from django.db import models
     2 
     3 class Article(models.Model):
     4     title = models.CharField(max_length=200)
     5     content = models.TextField()
     6     category = models.ForeignKey('Category',on_delete=models.CASCADE,null=True)
     7     create_time = models.DateTimeField(auto_now_add=True,null=True)  # 保存时获取当前时间
     8     class Meta:
     9         db_table = 'article'
    10     def __str__(self):
    11         return "<Article: ID:%s,title:%s,content:%s>" % (self.id,self.title,self.content)
    12 
    13 class Category(models.Model):
    14     name = models.CharField(max_length=100)
    15     class Meta:
    16         db_table = 'category'

    视图导入:

    1 from django.shortcuts import render
    2 from .models import Article,Category
    3 from django.http import HttpResponse
    4 from datetime import datetime,time,date
    5 from django.utils.timezone import make_aware
    6 
    7 def...

    数据库内容:

    • 使用filter返回QuerySet数据集类型,可调用方法.query;使用get返回一个模型时,不能使用该方法;
    • QuerySet.query:‘query’可用来查看这个‘ORM’查询语句最终被翻译成的‘SQL’语句;
    • exact/iexact:查找的与原内容完全相等时才能被找到,只是like与=的区别,多数情况下是一样的,可直接省略‘__exact’;
      1 def index(requset):
      2     article = Article.objects.filter(title__exact='三国演义')
      3     article = Article.objects.filter(title__iexact='三国演义')
      4     print(article.query)
      5     print(type(article))
      6     return HttpResponse('success')
      7     # >>> SELECT `article`.`id`, `article`.`title`, `article`.`content` FROM `article` WHERE `article`.`title` = 三国演义
      8     # >>> SELECT `article`.`id`, `article`.`title`, `article`.`content` FROM `article` WHERE `article`.`title` LIKE 三国演义
      9     # <class 'django.db.models.query.QuerySet'>
    • contains/icontains:只要包含有查找的内容就能被找到;
      1 def index1(request):
      2     result = Article.objects.filter(title__contains='hello')
      3     print(result.query)
      4     return  HttpResponse('success')
      5     # 使用contains区分大小写,icontains不区分;
      6     # SELECT `article`.`id`, `article`.`title`, `article`.`content` FROM `article` WHERE `article`.`title` LIKE BINARY %hello%
    • in:查找in中所包含的内容
       1 def index2(requset):
       2     # 1、查找id为1,2,3的文章
       3     articles = Articel.objects.filter(id__in=[1,2,3])
       4     for article in articles:
       5         print(article)
       6 
       7     # 2、查找文章id为1,2,3的分类;'__id'可省略;article_in中的‘article’反向查询可用‘related_query_name’改名,
       8     # 类似于‘related_name’的用法,改后仍需加‘__in’;
       9     category = Category.objects.filter(articel__id__in=[1,2,3])
      10 
      11     # 查找所有包含hello的分类
      12     articles = Article.objects.filter(title__icontains='hello')
      13     categorys = Category.objects.filter(article__in=articles)
      14     for category in categorys:
      15         print(category)
      16     return HttpResponse('success')
    • gt/gte、lt/lte:大于/大于等于、小于/小于等于;(greater/lower than equal)
      1 article = Article.objects.filter(id__gt=2)
      2     # startswith/endswith:以什么开头或结尾,前面加‘i’表不区分大小写;
      3     articles = Article.objects.filter(title__startswith='hello')
      4     return HttpResponse('success')
    • range:需指定时间段,时间应标记为‘aware’时间。(make_aware(value,timezone=None,is_dst=None):没有传入时区时,将获取当前的时区:timezone = get_current_timezone();即获取settings.py中‘TIME_ZONE = 'Asia/Shanghai'’设置的时区;)
      1 def index5(requset):
      2     start_time = make_aware(datetime(year=2019,month=3,day=7,hour=15,minute=0,second=0))
      3     end_time = make_aware(datetime(year=2019,month=3,day=7,hour=16,minute=0,second=0))
      4     articles = Article.objects.filter(creat_time__range=(start_time,end_time))
      5     print(articles.query)
      6     print(articles)
      7     return HttpResponse('success')
    • DATE:将create_time的datetime类型转换为DATE的类型;
      1 def index6(request):
      2     article = Article.objects.filter(create_time__date=date(year=2019,month=3,day=7))
      3     print(article.query)
      4     print(article)
      5     return HttpResponse('success')
       1 # CONVERT_TZ:将时间从UTC的时区转换为Asia/Shanghai的时区;因MySQL本身不具备这些时区的信息,所以相当于
       2 # 转换失败,需将具有该信息的文件拷贝进mysql中。
       3 # 在官网https://dev.mysql.com/downloads/timezones.html中下载文件timezone_2018i_posix.zip - POSIX standard解压后拷贝覆盖
       4 # 到:C:ProgramDataMySQLMySQL Server 5.7Datamysql 路径下(先将原文件保存);
       5 # 后重启数据库,使用命令:set stop/start [mysql数据库名] 进行重启(可在服务中查看数据库名字);
       6 # Linux或Mac中執行命令:mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -D mysql -u root -p 密码;(数据库,用户,密码)
       7 # 错误输出:<QuerySet []>
       8 # 正常输出:
       9 # SELECT `article`.`id`, `article`.`title`, `article`.`content`, `article`.`category_id`, `article`.`create_time` FROM
      10 # `article` WHERE DATE(CONVERT_TZ(`article`.`create_time`, 'UTC', 'Asia/Shanghai')) = 2019-03-07
      11 # <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...>>]>
      1 def index7(request):
      2     # 查找某个时间的数据,因秒(second)需精确到小数位,所以用range方法;
      3     # article = Article.objects.filter(create_time__time=time(hour=15, minute=29, second=15))
      4     start_time = time(hour=15,minute=29,second=15)
      5     end_time = time(hour=15,minute=29,second=16)
      6     article = Article.objects.filter(create_time__time__range=(start_time,end_time))
      7     print(article)
      8     return HttpResponse('success')
    • regex:使用正则表达式
      1 def index8(request):
      2     # regex 表示区分大小写
      3     articles = Article.objects.filter(title__iregex=r"^hello")
      4     print(articles)
  • 相关阅读:
    PHP vscode+XDebug 远程断点调试服务器上的代码
    Wordpress 为用户或角色 role 添加 capabilities(权限)
    Wordpress 后台文章编辑区添加模板选择功能
    CentOS 7 编译安装最新版git
    WordPress 通过文章 URL 获取文章 ID
    Web 安全问题 rel="noopener nofollw"
    Wordpress 通过 post id 获取文章 url
    git放弃修改&放弃增加文件
    Wordpress 作者模板页中的自定义帖子类型分页问题
    PHP 删除 url 中的 query string
  • 原文地址:https://www.cnblogs.com/liqiongming/p/10511620.html
Copyright © 2011-2022 走看看