手把手教你用Django执行原生SQL.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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):

文档评论(0)

liuxiyuliuxingyu + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档