django执行原生sql_mysql语句执行顺序

django执行原生sql_mysql语句执行顺序前言Django在查询数据时,大多数查询都能使用ORM提供的API方法,但对于一些复杂的查询可能难以使用ORM的API方法实现,因此Django引入了SQL语句的执行方法,有以下三种执行方式ext

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

Django在查询数据时,大多数查询都能使用ORM提供的API方法,但对于一些复杂的查询可能难以使用ORM的API方法实现,因此Django引入了SQL语句的执行方法,有以下三种执行方式

  • extra:结果集修改器,一种提供额外查询参数的机制。
  • raw:执行原始SQL并返回模型实例对象。
  • execute:直接执行自定义SQL

以上3种方式,这里只介绍raw方式,用的最多,也最推荐使用
 

raw

只能实现数据查询操作,并且要依靠模型对象,在Pycharm里打开raw源码,如下图所示,它一共定义了4个参数,每个参数如下:

  • raw_query:SQL语句
  • params:如果raw_query设置字符串格式化%s,那么该参数为raw_query提供数值
  • translations:为查询的字段设置别名
  • using:数据库对象,即Django所连接的数据库
    def raw(self, raw_query, params=None, translations=None, using=None):
        if using is None:
            using = self.db
        qs = RawQuerySet(raw_query, model=self.model, params=params, translations=translations, using=using)
        qs._prefetch_related_lookups = self._prefetch_related_lookups[:]
        return qs

上述参数只有raw_query是必选参数,其他参数可根据需求自行选择。我们以模型Student为例,使用raw实现数据查询,代码如下:

students = Student.objects.raw('select * from Student')
    for student in students:
        print(student)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/166162.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【kubernetes集群系列(二)】Worker(node)安装(使用kubeadm)

    【kubernetes集群系列(二)】Worker(node)安装(使用kubeadm)

    2021年5月13日
    145
  • AngularJS所有版本下载地址

    AngularJS所有版本下载地址AngularJS官网本身采用AngularJS库构建,页面中的AngularJS库通过Google的CDN(内容分发网络)引入,所以国内访问会有问题。大家可以从下面地址获取AngularJS所以版本:https://code.angularjs.org/各种版本应有尽有,上图为证:补充说明:每个目录下有对应版本的压缩包,下载压缩包即可

    2022年7月25日
    15
  • Java堆结构PriorityQueue完全解析

    Java堆结构PriorityQueue完全解析在堆排序这篇文章中千辛万苦的实现了堆的结构和排序,其实在Java1.5版本后就提供了一个具备了小根堆性质的数据结构也就是优先队列PriorityQueue。下面详细了解一下PriorityQueue到底是如何实现小顶堆的,然后利用PriorityQueue实现大顶堆。PriorityQueue的数据结构PriorityQueue的逻辑结构是一棵完全二叉树,存储结构其实是一个数组。逻辑结构层次遍历的

    2022年4月29日
    45
  • 2019idea永久激活方法 3月最新注册码

    2019idea永久激活方法 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    45
  • centos7中firewall防火墙详解和配置_centos8 防火墙

    centos7中firewall防火墙详解和配置_centos8 防火墙一、ipset概述ipset与iptableiptables是在Linux内核中配置防火墙规则的用户空间工具。在内核版本更新到2.4以来,iptable一直作为系统中主要的防火墙解决方案。CentOS7将原来的iptable替换为firewall,而firewall提供了对ipset的支持。ipset相当于iptable的扩展,它和iptable处理方式,iptable通过链表…

    2022年9月27日
    3
  • ROS中cv_bridge如何用python3进行编译

    ROS中cv_bridge如何用python3进行编译最近遇到了个问题,cv_bridge实现了opencv和ros中图像数据类型的转换,但ros-melodic默认python版本是python2。在配置yolact环境的时候,要求是python3。这就导致在ros自带的cv_bridge是python2版本,想使用python3的话需要自己去编译cv_bridge。否则会报错:ImportError:dynamicmoduledoesnotdefinemoduleexportfunction(PyInit_cv_bridge_boo

    2022年5月27日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号