##################################################################

__exact 精确等于 like 'aaa'
__iexact 精确等于 忽略大小写 ilike 'aaa'
__contains 包含 like '%aaa%'
__icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。

##################################################################

def all(self)

    # 获取所有的数据对象

def filter(self*args, **kwargs)

    # 条件查询

    # 条件可以是:参数,字典,Q

def exclude(self*args, **kwargs)

    # 条件查询

    # 条件可以是:参数,字典,Q

def select_related(self*fields)

    性能相关:表之间进行join连表操作,一次性获取关联的数据。

    总结:

    1. select_related主要针一对一和多对一关系进行优化。

    2. select_related使用SQL的JOIN语句进行优化,通过减少SQL查询的次数来进行优化、提高性能。

def prefetch_related(self*lookups)

    性能相关:多表连表操作时速度会慢,使用其执行多次SQL查询在Python代码中实现连表操作。

    总结:

    1. 对于多对多字段(ManyToManyField)和一对多字段,可以使用prefetch_related()来进行优化。

    2. prefetch_related()的优化方式是分别查询每个表,然后用Python处理他们之间的关系。

def annotate(self*args, **kwargs)

    # 用于实现聚合group by查询

    from django.db.models import Count, Avg, MaxMinSum

    = models.UserInfo.objects.values('u_id').annotate(uid=Count('u_id'))

    # SELECT u_id, COUNT(ui) AS `uid` FROM UserInfo GROUP BY u_id

    = models.UserInfo.objects.values('u_id').annotate(uid=Count('u_id')).filter(uid__gt=1)

    # SELECT u_id, COUNT(ui_id) AS `uid` FROM UserInfo GROUP BY u_id having count(u_id) > 1

    = models.UserInfo.objects.values('u_id').annotate(uid=Count('u_id',distinct=True)).filter(uid__gt=1)

    # SELECT u_id, COUNT( DISTINCT ui_id) AS `uid` FROM UserInfo GROUP BY u_id having count(u_id) > 1

def distinct(self*field_names)

    # 用于distinct去重

    models.UserInfo.objects.values('nid').distinct()

    # select distinct nid from userinfo

    注:只有在PostgreSQL中才能使用distinct进行去重

def order_by(self*field_names)

    # 用于排序

    models.UserInfo.objects.all().order_by('-id','age')

def extra(self, select=None, where=None, params=None, tables=None, order_by=None, select_params=None)

    # 构造额外的查询条件或者映射,如:子查询

    Entry.objects.extra(select={'new_id'"select col from sometable where othercol > %s"}, select_params=(1,))

    Entry.objects.extra(where=['headline=%s'], params=['Lennon'])

    Entry.objects.extra(where=["foo='a' OR bar = 'a'""baz = 'a'"])

    Entry.objects.extra(select={'new_id'"select id from tb where id > %s"}, select_params=(1,), order_by=['-nid'])

 def reverse(self):

    # 倒序

    models.UserInfo.objects.all().order_by('-nid').reverse()

    # 注:如果存在order_by,reverse则是倒序,如果多个排序则一一倒序

 def defer(self*fields):

    models.UserInfo.objects.defer('username','id')

    

    models.UserInfo.objects.filter(...).defer('username','id')

    #映射中排除某列数据

 def only(self*fields):

    #仅取某个表中的数据

     models.UserInfo.objects.only('username','id')

     

     models.UserInfo.objects.filter(...).only('username','id')

 def using(self, alias):

     指定使用的数据库,参数为别名(setting中的设置)

##################################################

# PUBLIC METHODS THAT RETURN A QUERYSET SUBCLASS #

##################################################

def raw(self, raw_query, params=None, translations=None, using=None):

    # 执行原生SQL

    models.UserInfo.objects.raw('select * from userinfo')

    # 如果SQL是其他表时,必须将名字设置为当前UserInfo对象的主键列名

    models.UserInfo.objects.raw('select id as nid from 其他表')

    # 为原生SQL设置参数

    models.UserInfo.objects.raw('select id as nid from userinfo where nid>%s', params=[12,])

    # 将获取的到列名转换为指定列名

    name_map = {'first''first_name''last''last_name''bd''birth_date''pk''id'}

    Person.objects.raw('SELECT * FROM some_other_table', translations=name_map)

    # 指定数据库

    models.UserInfo.objects.raw('select * from userinfo', using="default")

    ################### 原生SQL ###################

    from django.db import connection, connections

    cursor = connection.cursor()  # cursor = connections['default'].cursor()

    cursor.execute("""SELECT * from auth_user where id = %s""", [1])

    row = cursor.fetchone() # fetchall()/fetchmany(..)

def values(self*fields):

    # 获取每行数据为字典格式

def values_list(self*fields, **kwargs):

    # 获取每行数据为元祖

def dates(self, field_name, kind, order='ASC'):

    # 根据时间进行某一部分进行去重查找并截取指定内容

    # kind只能是:"year"(年), "month"(年-月), "day"(年-月-日)

    # order只能是:"ASC"  "DESC"

    # 并获取转换后的时间

        - year : 年-01-01

        - month: 年--01

        - day  : 年--

    models.DatePlus.objects.dates('ctime','day','DESC')

def datetimes(self, field_name, kind, order='ASC', tzinfo=None):

    # 根据时间进行某一部分进行去重查找并截取指定内容,将时间转换为指定时区时间

    # kind只能是 "year", "month", "day", "hour", "minute", "second"

    # order只能是:"ASC"  "DESC"

    # tzinfo时区对象

    models.DDD.objects.datetimes('ctime','hour',tzinfo=pytz.UTC)

    models.DDD.objects.datetimes('ctime','hour',tzinfo=pytz.timezone('Asia/Shanghai'))

    """

    pip3 install pytz

    import pytz

    pytz.all_timezones

    pytz.timezone(‘Asia/Shanghai’)

    """

def none(self):

    # 空QuerySet对象

####################################

# METHODS THAT DO DATABASE QUERIES #

####################################

def aggregate(self*args, **kwargs):

   # 聚合函数,获取字典类型聚合结果

   from django.db.models import Count, Avg, MaxMinSum

   result = models.UserInfo.objects.aggregate(k=Count('u_id', distinct=True), n=Count('nid'))

   ===> {'k'3'n'4}

def count(self):

   # 获取个数

def get(self*args, **kwargs):

   # 获取单个对象

def create(self**kwargs):

   # 创建对象

def bulk_create(self, objs, batch_size=None):

    # 批量插入

    # batch_size表示一次插入的个数

    objs = [

        models.DDD(name='r11'),

        models.DDD(name='r22')

    ]

    models.DDD.objects.bulk_create(objs, 10)

def get_or_create(self, defaults=None**kwargs):

    # 如果存在,则获取,否则,创建

    # defaults 指定创建时,其他字段的值

    obj, created = models.UserInfo.objects.get_or_create(username='root1', defaults={'email''1111111','u_id'2't_id'2})

def update_or_create(self, defaults=None**kwargs):

    # 如果存在,则更新,否则,创建

    # defaults 指定创建时或更新时的其他字段

    obj, created = models.UserInfo.objects.update_or_create(username='root1', defaults={'email''1111111','u_id'2't_id'1})

def first(self):

   # 获取第一个

def last(self):

   # 获取最后一个

def in_bulk(self, id_list=None):

   # 根据主键ID进行查找

   id_list = [11,21,31]

   models.DDD.objects.in_bulk(id_list)

def delete(self):

   # 删除

def update(self**kwargs):

    # 更新

def exists(self):

   # 是否有结果

QuerySet方法大全相关推荐

  1. robo3t 连接服务器数据库_车牌识别软件连接各种数据库方法大全

    软件连接各种数据库方法大全 1:软件连接免安装数据库. 免安装数据库使用方便,不受操作系统版本影响,不用安装,解压打开运行即可,所以免安装数据库不要放在桌面上,也不要解压打开多个. 打开车牌识别软件, ...

  2. C语言常用排序方法大全

    C语言常用排序方法大全 /* ============================================================================= 相关知识介绍( ...

  3. python基础30个常用代码大全-Python3列表内置方法大全及示例代码小结

    Python中的列表是简直可说是有容乃大,虽然看似类似C中的数组,但是Python列表可以接受任意的对象元素,比如,字符串,数字,布尔值,甚至列表,字典等等,自由度提升到一个新的高度,而Python也 ...

  4. mysql删除重复文章标题_MySQL中查询、删除重复记录的方法大全

    前言 本文主要给大家介绍了关于MySQL中查询.删除重复记录的方法,分享出来供大家参考学习,下面来看看详细的介绍: 查找所有重复标题的记录: 一.查找重复记录 1.查找全部重复记录 2.过滤重复记录( ...

  5. IT 巡检内容、方法大全

    IT 巡检内容.方法大全 目 录 1.  概述 2.  巡检维度 3.  巡检内容 4.  巡检方法 5.  常用命令.常见问题和解决方法 6.  附录 1 词汇表 7.  附录 2 参考资料 1. ...

  6. js检测字符串方法大全

    js检测字符串方法大全 <script> /* function obj$(id)                      根据id得到对象 function val$(id)      ...

  7. java读取文件的方法是_Java读取文件方法大全

    Java读取文件方法大全 2011/11/25 9:18:42  tohsj0806  http://tohsj0806.iteye.com  我要评论(0) 摘要:文章来源:http://www.c ...

  8. SEO搜索引擎优化排名方法大全

    SEO搜索引擎优化排名方法大全 正确的搜索引擎优化可以有效的帮助网站得到正确的排名,仅此而已,这也是我写这篇文章的目的. 过度优化甚至作弊不但费时费力,而且对网站没有实际帮助. 提高在搜索引擎中排名的 ...

  9. 生成osm文件_超酷城市肌理!地理数据信息爬取方法大全(B篇)DEM+POI+OSM

    WENWEN:这一弹是对第一弹的补充和深化讲解,上一弹请点击常用的地理数据信息爬取方法大全(前期场地信息获取第一弹),关于DEM获取地形地理空间数据云提交任务一直在排队的问题,这个应该是官网的问题,不 ...

最新文章

  1. 转帖:HttpStatusCode状态说明C#版
  2. 爬过这 6 个坡,你就能对 Linux 操作系统了如指掌
  3. 【转】 Ubuntu 11.04 下安装配置 JDK 7
  4. nefu 753 n!末尾有多少个0
  5. 在Xcode8中 如何添加.pch文件
  6. 图【数据结构F笔记】
  7. IDEA——修改idea64.exe.vmoptions文件解决coding卡顿问题
  8. MySql关键字-保留字
  9. python中如何计算集合的长度_Python如何计算序列长度 python dataframe中元素如何统计?...
  10. BZOJ5249:[九省联考2018]IIIDX——题解
  11. ZXing拍码后区分扫描到的是一维码、二维码、其他码,android音视频面试
  12. 【Google浏览器无法登录账号】为安全起见,您无法从此设备登录。请稍后重试,或从其他设备登录
  13. 【idea使用】主题文字修改
  14. OpenCV 自带示例sample中的双目校正stereo_calib.cpp 安装与解读
  15. 关于MATLAB直方图的绘制及应用
  16. 利用公式实现RGB图转化为灰度图
  17. 压缩图片大小至指定Kb以下
  18. 如何解决万能地图下载器下载的地图和选择范围不一致
  19. 【docker】gitlab + qqmail配置SMTP
  20. 微信小程序 java springboot理发店美容店预约系统

热门文章

  1. Python的pickle模块详解(包括优缺点及和JSON的区别)
  2. UI设计一般要学什么内容 相关学习路线是什么
  3. 与庄子何干--听于丹教授讲庄子
  4. 百度浏览器屏蔽H5固定在底部按钮之解决方案
  5. MySQL笔记:B站康师傅天花板教程(持续更新)
  6. 第6章 写一个块设备驱动
  7. [附源码]计算机毕业设计JAVA日常饮食健康推荐系统
  8. minicom指令_串口调试利器--Minicom配置及使用详解.md
  9. Linux安装jdk替换默认open jdk
  10. matlab火星漫游车转向控制,ExoMy DIY漫游车让人们打造属于自己的火星探测器