- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
手把手教你用Django执行原生SQL
Hey,各位小伙伴,这次怎样来玩一下,如何使用Django执行原生SQL。
我们都晓得,Python在web界的扛把子——Django,可谓是集大成为统一,各种各样的插件、forms组件、model模型、Admin后台等等,后面我会特地出文章娓娓道来,反正就是一个字,NB。
本次就来学一下,如何在Django执行原生语句。
起因
在使用Django时,一般情况下,我们使用Django自带的model查询是没有问题的,基天性满足80%的问题
但是,但是,那20%就不要了吗???确定不行哎,小孩才做选择
在Django执行原生SQL有以下三种方式
extra
raw
django connection
一般情况下,就以上三种方式
表结构
文件:django_project/app01/models
class Book(models.Model):
title = models.CharField(verbose_name=书名, max_length=32)
describe = models.TextField(verbose_name=描述)
author = models.CharField(verbose_name=作者, max_length=32)
publisher = models.CharField(verbose_name=出版社, max_length=32)
publisher_date = models.DateField(verbose_name=publisher)
就是一个很简约的图书表
通过admin录入一些数据测试使用
extra方式
猛烈建议,不用学,没毛用
raw方式
这个相比较extra,还是比较有用的,
语法如下
models.表名.objecs.raw(sql)
models.表名.objecs.raw(sql,[参数1,参数2])
注:假如没有参数,就只写sql语句,假如由参数,后面需要用列表,如图所示
举例
前往的仍旧一个个的Book对象
真正的原生sql方式
上述的,其实还是和django的model有些绑定。但是我就是说,我就是想要原生sql,不要跟任何绑定。
这里说一下,千万不要在django使用pymysql执行原生sql,会发生一些惊异的问题。肯定要导入from django.db import connection执行sql。代码如下:
from django.db import connection
def book_list(request):
# 真正的原生sql,
cursor = connection.cursor()
print(type(cursor))
cursor.execute(select * from app01_book where id=%s, [1, ])
raw = cursor.fetchall()
print(raw)
前往内容如下图所示:
可以看到,前往的是列表里面套一个个的数组。我就在想,有没有什么方法能将查询出来的sql,直接前往成字典呢?答案是当然可以!
执行原生sql并且前往成dict
我将执行原生sql并且直接前往成字典的方式封装成了两个函数
一个是查询多个,代码如下所示:
def query_all_dict(sql, params=None):
查询全部结果前往字典类型数据
:param sql:
:param params:
:return:
with connection.cursor() as cursor:
if params:
cursor.execute(sql, params=params)
else:
cursor.execute(sql)
col_names = [desc[0] for desc in cursor.description]
row = cursor.fetchall()
rowList = []
for list in row:
tMap = dict(zip(col_names, list))
rowList.append(tMap)
return rowList
一个是查询一个,代码如下所示:
def query_one_dict(sql, params=None):
您可能关注的文档
最近下载
- 全站仪的坐标放样工程测量74课件讲解.pptx VIP
- 湖北省楚天协作体2024-2025学年高一下学期期中考试语文试题(含答案).docx VIP
- 后续服务承诺及其保障措施.docx VIP
- 2024凉山州专业技术人员继续教育公需科目-《经济思想学习纲要》学习辅导试题及满分答案.docx VIP
- 油库安全设施设计专篇.pdf VIP
- 建筑施工 - 新19J108外墙外保温薄抹灰系统建筑构造.pdf VIP
- 建筑测量工程全站仪坐标放样及坐标测量教程.pptx VIP
- 湖北省楚天教科研协作体2024-2025学年高一下学期期中考试政治试卷 含解析.docx VIP
- 全站仪数据采集坐标放样.doc VIP
- 新药非临床安全性评价.ppt
文档评论(0)