Django运行SQL语句
1、Manager.
raw
(raw_query, params=None, translations=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语句相关推荐
- linux程序设计——运行SQL语句(第八章)
8.3 使用C语言訪问MySQL数据 8.3.3 运行SQL语句 运行SQL语句的主要API函数被恰当的命名为: int mysql_query(MYSQL *connection, const ...
- datagrip中运行sql语句
datagrip中运行sql语句 在上面写完sql语句后,点击下面的图片中的绿色按钮就可以运行 Ctrl+Enter就可以直接运行了. 另外,不写","也是可以运行的. datag ...
- 数据库关键字问题mysql 运行sql语句check关键字报错
mysql 运行sql语句check关键字报错.出错:因为check为 mysql的保留关键字,改名即可. 遇到数据库语句问题可以参考下这个问题,之前的access数据库用的check作为表明,代码迁 ...
- django mysql sql语句_Django笔记:连接数据库并执行SQL语句
Django中安装好数据库和对应的数据库驱动之后,就可以直接执行SQL语句进行数据库和表的创建,以及数据的增删改查等操作,在Python3中,可以使用的数据库和驱动有多种,我这里使用的是MySQL数据 ...
- python sql语句生成_python Django 生成sql语句
class TestModel(models.Model): Name=models.CharField(max_length=64,blank=True) >>> from dja ...
- django mysql sql语句_Django中使用mysql数据库并使用原生sql语句操作
Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件 mysql数据库,版本5. ...
- mysql 命令运行sql语句和sql脚本
文章目录 1. mysql 帮助文档 1. mysql 帮助文档 Usage: mysql [OPTIONS] [database] //命令方式-?, --help //显示帮助信息并退出-I, - ...
- oracle数据库用脚本运行SQL语句
1. 在同一个目录下创建 runBatch.bat sqlplus sys/sangfor@orcl as sysdba @sql.txtpause sql.txt 要执行的SQL语句 2. 双击ru ...
- oracle查运行sql语句,查询Oracle正在执行的SQL语句
查询Oracle正在执行的sql语句及执行该语句的用户 查看正在执行sql的发起者的调用程序 查出oracle当前的被锁对象 结束当前的锁对象 无 SELECT b.sid oracleID, b.u ...
最新文章
- vue在js上处理后台返回的数组_vuejs 根据后台返回数组,渲染图片路径
- 2022-03-19
- Spring Boot——自定义Web配置类后无法访问/static文件夹下静态资源
- Celery 启动报错 can_read() got an unexpected keyword argument timeout
- BZOJ 3489: A simple rmq problem
- vsphere平台windows虚拟机克隆的小插曲(无法登陆系统)
- php识别html5,CSS_在IE6/7/8下识别html5标签(让老式浏览器识别html5),识别html5标签: html5添加了许 - phpStudy...
- 计算机导论电子版_程序员进阶系列:拿下中科大的计算机课程全靠它了!
- Eclipse开发环境配置
- 各个版本的精易模块分享下载
- 计算非空单元格的个数
- 曼昆经济学原理读书笔记加杂感(一)
- Thesus(忒修斯)的故事
- vdagent与vdserver
- 【Excel自动化办公Part3】:工作表的创建、删除、复制和修改名称,冻结窗格,添加筛选
- html缩小照片尺寸像素不变,怎么把图片变小 像素不变
- 没有盖兹 微软会更好?
- 什么是mvc,mvc有什么用?
- 采油高级工实际计算机,采油工高级实际管柱图.ppt
- 深入浅出了解撞库攻击!
热门文章
- C++递增运算符重载
- 经典C语言程序100例之一零零
- 经典C语言程序100例之十一
- C/C++中*和的用法详解
- k8s pod里访问不到外部ip_K8S中的Service的存在理由
- tsql 正则_T-SQL中的SQL Server正则表达式
- 08_索引与切片,Indexing,Python风格的索引,index_select()选择特定索引,使用...索引任意多的维度,使用mask索引,take索引
- Kettle使用_31 CSV文件输入跳过前几(首)行之过滤记录
- Kettle使用_14 文件操作复制移动删除结合JS
- 论文笔记 OHEM: Training Region-based Object Detectors with Online Hard Example Mining