Django框架 查询Extra功能实现解析


Posted in Python onSeptember 04, 2019

extra

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

有些情况下,Django的查询语法难以简单的表达复杂的 WHERE 子句,对于这种情况, Django 提供了 extra() QuerySet修改机制 — 它能在 QuerySet生成的SQL从句中注入新子句。

extra可以指定一个或多个 参数,例如 select, where or tables. 这些参数都不是必须的,但是你至少要使用一个!要注意这些额外的方式对不同的数据库引擎可能存在移植性问题.(因为你在显式的书写SQL语句),除非万不得已,尽量避免这样做.

参数之select

The select 参数可以让你在 SELECT 从句中添加其他字段信息,它应该是一个字典,存放着属性名到 SQL 从句的映射。

queryResult=models.Article




 .objects.extra(select={'is_recent': "create_time > '2018-04-18'"})

结果集中每个 Entry 对象都有一个额外的属性is_recent, 它是一个布尔值,表示 Article对象的create_time 是否晚于2018-04-18.

练习:

# in sqlite:
  article_obj=models.Article.objects






.filter(nid=1)







.extra(select={"standard_time":"strftime('%%Y-%%m-%%d',create_time)"})







.values("standard_time","nid","title")
  print(article_obj)
  # <QuerySet [{'title': 'MongoDb 入门教程', 'standard_time': '2017-09-03', 'nid': 1}]>

参数之where /tables

您可以使用where定义显式SQL WHERE子句 - 也许执行非显式连接。您可以使用tables手动将表添加到SQL FROM子句。

where和tables都接受字符串列表。所有where参数均为“与”任何其他搜索条件。

练习:

queryResult=models.Article




 .objects.extra(where=['nid in (1,3) OR title like "py%" ','nid>2'])

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python选择排序算法的实现代码
Nov 21 Python
Python函数参数类型*、**的区别
Apr 11 Python
Python升级导致yum、pip报错的解决方法
Sep 06 Python
Python构建网页爬虫原理分析
Dec 19 Python
python3 实现的对象与json相互转换操作示例
Aug 17 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
python内置模块collections知识点总结
Dec 19 Python
Python文件读写w+和r+区别解析
Mar 26 Python
TensorFlow实现批量归一化操作的示例
Apr 22 Python
python安装sklearn模块的方法详解
Nov 28 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
Dec 07 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 Python
Django框架 Pagination分页实现代码实例
Sep 04 #Python
python 动态迁移solr数据过程解析
Sep 04 #Python
Django框架 信号调度原理解析
Sep 04 #Python
Django Admin中增加导出Excel功能过程解析
Sep 04 #Python
Django Admin中增加导出CSV功能过程解析
Sep 04 #Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 #Python
通过Python编写一个简单登录功能过程解析
Sep 04 #Python
You might like
ADODB的数据库封包程序库
2006/12/31 PHP
php微信支付之APP支付方法
2015/03/04 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
CL vs ForZe BO5 第三场 2.13
2021/03/10 DOTA
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
2013/01/23 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
常见的javascript跨域通信方法
2015/12/31 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
python快速查找算法应用实例
2014/09/26 Python
python根据出生日期获得年龄的方法
2015/03/31 Python
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
python如何变换环境
2020/07/21 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
DNA测试:Orig3n
2019/03/01 全球购物
如何保障Web服务器安全
2014/05/05 面试题
学校采购员岗位职责
2014/01/02 职场文书
总经理岗位职责描述
2014/02/08 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
九年级英语教学反思
2016/02/15 职场文书
理解深度学习之深度学习简介
2021/04/14 Python