1、Manager.raw(raw_queryparams=Nonetranslations=None)

>>> for p in Person.objects.raw('SELECT * FROM myapp_person'):
...     print(p)
John Smith
Jane Jones

这个方法接受一个原始的SQL查询,执行它,并返回一个django.db.models.query。RawQuerySet实例。这个RawQuerySet实例可以像普通的QuerySet一样遍历,以提供对象实例。

(1)字段匹配

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

(2)即使没有显示表明查询字段,也可以获取

>>> for p in Person.objects.raw('SELECT id, first_name FROM myapp_person'):
...     print(p.first_name, # This will be retrieved by the original query
...           p.last_name) # This will be retrieved on demand
...
John Smith
Jane Jones

(3)执行带参数SQL

字符串用%s占位符

字典用%(key)s占位符

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

(4)严禁使用字符串拼接

>>> query = 'SELECT * FROM myapp_person WHERE last_name = %s' % lname
>>> Person.objects.raw(query)

(4)参数不能用引号包裹

>>> query = "SELECT * FROM myapp_person WHERE last_name = '%s'"

2、通过connection.cursor()执行SQL

对象django.db.connection表示默认的数据库连接。要使用数据库连接,请调用connection.cursor()来获得一个游标对象。然后调用cursor.execute(sql, [params])方法以执行sql

cursor.fetchone()或cursor.fetchall()以返回结果行。

from django.db import connectiondef my_custom_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

(1)传递百分比参数需要写两个百分号

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

(2)cursor执行不会返回列名

用字典或命名元组

def dictfetchall(cursor):"Return all rows from a cursor as a dict"columns = [col[0] for col in cursor.description]return [dict(zip(columns, row))for row in cursor.fetchall()]
 
from collections import namedtupledef namedtuplefetchall(cursor):"Return all rows from a cursor as a namedtuple"desc = cursor.descriptionnt_result = namedtuple('Result', [col[0] for col in desc])return [nt_result(*row) for row in cursor.fetchall()]
>>> cursor.execute("SELECT id, parent_id FROM test LIMIT 2");
>>> dictfetchall(cursor)
[{'parent_id': None, 'id': 54360982}, {'parent_id': None, 'id': 54360880}]

来源:https://www.cnblogs.com/SunQi-Tony/p/9985616.html

Django运行SQL语句相关推荐

  1. linux程序设计——运行SQL语句(第八章)

    8.3    使用C语言訪问MySQL数据 8.3.3 运行SQL语句 运行SQL语句的主要API函数被恰当的命名为: int mysql_query(MYSQL *connection, const ...

  2. datagrip中运行sql语句

    datagrip中运行sql语句 在上面写完sql语句后,点击下面的图片中的绿色按钮就可以运行 Ctrl+Enter就可以直接运行了. 另外,不写","也是可以运行的. datag ...

  3. 数据库关键字问题mysql 运行sql语句check关键字报错

    mysql 运行sql语句check关键字报错.出错:因为check为 mysql的保留关键字,改名即可. 遇到数据库语句问题可以参考下这个问题,之前的access数据库用的check作为表明,代码迁 ...

  4. django mysql sql语句_Django笔记:连接数据库并执行SQL语句

    Django中安装好数据库和对应的数据库驱动之后,就可以直接执行SQL语句进行数据库和表的创建,以及数据的增删改查等操作,在Python3中,可以使用的数据库和驱动有多种,我这里使用的是MySQL数据 ...

  5. python sql语句生成_python Django 生成sql语句

    class TestModel(models.Model): Name=models.CharField(max_length=64,blank=True) >>> from dja ...

  6. django mysql sql语句_Django中使用mysql数据库并使用原生sql语句操作

    Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件 mysql数据库,版本5. ...

  7. mysql 命令运行sql语句和sql脚本

    文章目录 1. mysql 帮助文档 1. mysql 帮助文档 Usage: mysql [OPTIONS] [database] //命令方式-?, --help //显示帮助信息并退出-I, - ...

  8. oracle数据库用脚本运行SQL语句

    1. 在同一个目录下创建 runBatch.bat sqlplus sys/sangfor@orcl as sysdba @sql.txtpause sql.txt 要执行的SQL语句 2. 双击ru ...

  9. oracle查运行sql语句,查询Oracle正在执行的SQL语句

    查询Oracle正在执行的sql语句及执行该语句的用户 查看正在执行sql的发起者的调用程序 查出oracle当前的被锁对象 结束当前的锁对象 无 SELECT b.sid oracleID, b.u ...

最新文章

  1. vue在js上处理后台返回的数组_vuejs 根据后台返回数组,渲染图片路径
  2. 2022-03-19
  3. Spring Boot——自定义Web配置类后无法访问/static文件夹下静态资源
  4. Celery 启动报错 can_read() got an unexpected keyword argument timeout
  5. BZOJ 3489: A simple rmq problem
  6. vsphere平台windows虚拟机克隆的小插曲(无法登陆系统)
  7. php识别html5,CSS_在IE6/7/8下识别html5标签(让老式浏览器识别html5),识别html5标签: html5添加了许 - phpStudy...
  8. 计算机导论电子版_程序员进阶系列:拿下中科大的计算机课程全靠它了!
  9. Eclipse开发环境配置
  10. 各个版本的精易模块分享下载
  11. 计算非空单元格的个数
  12. 曼昆经济学原理读书笔记加杂感(一)
  13. Thesus(忒修斯)的故事
  14. vdagent与vdserver
  15. 【Excel自动化办公Part3】:工作表的创建、删除、复制和修改名称,冻结窗格,添加筛选
  16. html缩小照片尺寸像素不变,怎么把图片变小 像素不变
  17. 没有盖兹 微软会更好?
  18. 什么是mvc,mvc有什么用?
  19. 采油高级工实际计算机,采油工高级实际管柱图.ppt
  20. 深入浅出了解撞库攻击!

热门文章

  1. C++递增运算符重载
  2. 经典C语言程序100例之一零零
  3. 经典C语言程序100例之十一
  4. C/C++中*和的用法详解
  5. k8s pod里访问不到外部ip_K8S中的Service的存在理由
  6. tsql 正则_T-SQL中的SQL Server正则表达式
  7. 08_索引与切片,Indexing,Python风格的索引,index_select()选择特定索引,使用...索引任意多的维度,使用mask索引,take索引
  8. Kettle使用_31 CSV文件输入跳过前几(首)行之过滤记录
  9. Kettle使用_14 文件操作复制移动删除结合JS
  10. 论文笔记 OHEM: Training Region-based Object Detectors with Online Hard Example Mining