iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >django怎么执行原生SQL查询
  • 179
分享到

django怎么执行原生SQL查询

2023-06-20 20:06:24 179人浏览 八月长安
摘要

本篇内容介绍了“Django怎么执行原生sql查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录执行原生 SQL 查询执行原生查询1 普

本篇内容介绍了“Django怎么执行原生sql查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录
  • 执行原生 SQL 查询

  • 执行原生查询

    • 1 普通查询

    • 2 将查询字段映射为模型字段

    • 3 索引查询

    • 4 将参数传给 raw()

  • 直接执行自定义 SQL

执行原生 SQL 查询

DjanGo 允许你用两种方式执行原生 SQL 查询:

  • 你可以使用 Manager.raw() 来 执行原生查询并返回模型实例。

  • 或者完全不用模型层 直接执行自定义 SQL。

1、执行原生查询

管理器方法 raw() 能用于执行原生 SQL 查询,就会返回模型实例:

Manager.raw(raw_query, params=None, translations=None)

该方法接受一个原生 SQL 查询语句,执行它,并返回一个 django.db.models.query.RawQuerySet 实例。这个 RawQuerySet 能像普通的 QuerySet 一样被迭代获取对象实例。

1.1 普通查询

class Person(models.Model):    first_name = models.CharField(...)    last_name = models.CharField(...)    birth_date = models.DateField(...)

然后你可以像这样执行自定义 SQL:

for p in Person.objects.raw('SELECT * FROM app_person'): # django默认的表名是app名加类名    print(p)# 没有查询到就报错

1.2 将查询字段映射为模型字段

raw() 字段将查询语句中的字段映射至模型中的字段。
查询语句中的字段排序并不重要。换而言之,以下两种查询是一致的:

Person.objects.raw('SELECT id, first_name, last_name, birth_date FROM app_person')Person.objects.raw('SELECT last_name, birth_date, first_name, id FROM app_person')

匹配是根据名字来的。这意味着你可以使用 SQL 的 AS 子句将查询语句中的字段映射至模型中的字段。所以,若你还有一些数据表包含了 Person 数据,你可以很方便的将其映射至 Person 实例:

>>> Person.objects.raw('''SELECT first AS first_name,...                              last AS last_name,...                              bd AS birth_date,...                              pk AS id,...                       FROM app_person''')

只要名字对上了,模型实例就会被正确创建。

或者,你可以用 raw() 的 translations 参数将查询语句中的字段映射至模型中的字段。这是一个字典,将查询语句中的字段名映射至模型中的字段名。例如,上面的查询也能这样写:

>>> name_map = {'first': 'first_name', 'last': 'last_name', 'bd': 'birth_date', 'pk': 'id'}>>> Person.objects.raw('SELECT * FROM some_other_table', translations=name_map)

1.3 索引查询

raw() 支持索引,所以,若你只需要第一个结果就这样写:

>>> first_person = Person.objects.raw('SELECT * FROM app_person')[0]

1.4 将参数传给 raw()

如果你需要执行参数化的查询,可以使用 raw() 的 params 参数:

>>> lname = 'Doe'>>> Person.objects.raw('SELECT * FROM myapp_person WHERE last_name = %s', [lname])

params 是一个参数字典。你将用一个列表替换查询字符串中 %s 占位符,或用字典替换 %(key)s 占位符(其中, key 理所应当由字典 key 替换),不论你使用哪个数据库引擎。这些占位符会被 params 参数的值替换。
!!!必须以列表形式传入参数,格式一定是这样写,不能写成字符串

2、直接执行自定义 SQL

绕过模型层。

对象 django.db.connection 代表默认数据库连接。要使用这个数据库连接,调用 connection.cursor() 来获取一个指针对象。然后,调用 cursor.execute(sql, [params]) 来执行该 SQL 和 cursor.fetchone(),或 cursor.fetchall() 获取结果数据。

from django.db import connectiondef my_sql(self):    with connection.cursor() as cursor:        cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])        cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])        row = cursor.fetchone()    return row

要避免 SQL 注入,你绝对不能在 SQL 字符串中用引号包裹 %s 占位符。
注意,若要在查询中包含文本的百分号,你需要在传入参数使用两个百分号:

cursor.execute("SELECT foo FROM bar WHERE baz = '30%%' AND id = %s", [self.id])

2.1 指定连接数据库

用 django.db.connections 获取指定数据库的连接(和指针)。 django.db.connections 是一个类字典对象,它允许你通过连接别名获取指定连接:

from django.db import connectionswith connections['my_db_alias'].cursor() as cursor:

“django怎么执行原生SQL查询”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: django怎么执行原生SQL查询

本文链接: https://www.lsjlt.com/news/299949.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • django怎么执行原生SQL查询
    本篇内容介绍了“django怎么执行原生SQL查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录执行原生 SQL 查询执行原生查询1 普...
    99+
    2023-06-20
  • django执行原生SQL查询的实现
    目录执行原生 SQL 查询1、执行原生查询1.1 普通查询1.2 将查询字段映射为模型字段1.3 索引查询1.4 将参数传给 raw()2、直接执行自定义 SQL2.1 指定连接数据...
    99+
    2022-11-12
  • Django中怎么执行原生SQL
    这期内容当中小编将会给大家带来有关Django中怎么执行原生SQL,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。表结构文件:django_project/app01/mo...
    99+
    2022-10-18
  • Django怎么使用原生SQL查询数据库
    这篇文章主要介绍“Django怎么使用原生SQL查询数据库”,在日常操作中,相信很多人在Django怎么使用原生SQL查询数据库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Django怎么使用原生SQL查询...
    99+
    2023-07-06
  • SQL查询语句执行原理
    首先有一个 user_info 表,表里有一个 id 字段,执行下面这条查询语句:select * from user_info where id = 1;返回结果为:mysql基本架构...
    99+
    2022-10-18
  • Django使用原生SQL查询数据库详解
    Django 提供了两种方式来执行原生 SQL 代码。 一种是使用 raw() 函数,一种是 使用 connection.cursor()。 但是官方还是推荐在使用原生 SQL 之前...
    99+
    2023-05-15
    django使用原生SQL查询 django数据库增删改查 Django查询数据库
  • plsql怎么查询正在执行的sql
    在PL/SQL中,可以使用`V$SQL`视图查询正在执行的SQL语句。以下是一个示例查询:```SELECT sql_id,...
    99+
    2023-09-28
    plsql sql
  • SQL查询的执行顺序是什么
    本篇内容主要讲解“SQL查询的执行顺序是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL查询的执行顺序是什么”吧!很多 SQL 查询都是以 SELEC&...
    99+
    2022-10-19
  • SQL查询的执行顺序是怎样的
    本篇内容介绍了“SQL查询的执行顺序是怎样的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!SQL 查询的执...
    99+
    2022-10-19
  • MySql中怎么使用explain查询SQL的执行计划
    这篇文章主要介绍MySql中怎么使用explain查询SQL的执行计划,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!explain命令是查看查询优化器如何决定执行查询的主要方法。这个...
    99+
    2022-10-18
  • SQL查询语句执行的过程是什么
    这篇文章主要介绍“SQL查询语句执行的过程是什么”,在日常操作中,相信很多人在SQL查询语句执行的过程是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL查询语句执行的过程是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • SQL查询语句的执行顺序是怎样的
    这篇文章主要介绍“SQL查询语句的执行顺序是怎样的”,在日常操作中,相信很多人在SQL查询语句的执行顺序是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL查询语句的...
    99+
    2022-10-19
  • SQL Server中怎么使用ISNULL执行空值判断查询
    SQL Server中怎么使用ISNULL执行空值判断查询,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。有如下查询:复制代码 ...
    99+
    2022-10-18
  • django执行migrate无法生成表怎么办
    这篇文章主要讲解了“django执行migrate无法生成表怎么办”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“django执行migrate无法生成表怎么办”吧!django每修改一次模板...
    99+
    2023-06-02
  • Spring Data JPA使用JPQL与原生SQL进行查询的操作
    1、使用JPQL语句进行查询 JPQL语言(Java Persistence Query Language)是一种和SQL非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底...
    99+
    2022-11-12
  • 怎么查看sql的执行情况
    要查看SQL的执行情况,可以使用以下方法:1. 使用数据库管理工具:大多数数据库管理工具(如MySQL Workbench、Navi...
    99+
    2023-10-24
    sql
  • mysql怎么查看sql执行进度
    MySQL的执行进度可以通过SHOW PROCESSLIST命令来查看。 SHOW PROCESSLIST会显示当前MySQL服务器...
    99+
    2023-10-24
    mysql sql
  • oracle中怎么查看sql执行计划的执行顺序
    这篇文章主要讲解了“oracle中怎么查看sql执行计划的执行顺序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“oracle中怎么查看sql执行计划的执行顺...
    99+
    2022-10-18
  • plsql怎么查看正在执行的SQL
    在PL/SQL中,可以通过使用`DBMS_UTILITY.FORMAT_CALL_STACK`和`DBMS_UTILITY.FORM...
    99+
    2023-10-10
    PLSQL SQL
  • Oracle查询执行计划怎么实现
    这篇文章主要介绍“Oracle查询执行计划怎么实现”,在日常操作中,相信很多人在Oracle查询执行计划怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle查询执行计划怎么实现”的疑惑有所帮助!...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作