1. 执行自定义SQL语言:

    from django.db import connection
    ​
    cursor=connection.cursor()
    ​
    # 插入操作
    cursor.execute("insert into hello_author(name) values('传说中的申小五')")
    ​
    # 更新操作
    cursor.execute("update hello_author set name='abc' where name='bcd'")
    ​
    # 删除操作
    cursor.execute("delete from hello_author where name='abc'")
    ​
    # 查询操作
    cursor.execute("select * from hello_author")
    ​
    raw=cursor.fetchone()  # 返回结果行游标直读向前,读取一条
    cursor.fetchall()  # 读取所有
  2. 使用raw:

    Book.objects.raw('select * from hello_Book')  # 返回模型实例
  3. 使用extra:

    models.Book.objects.filter(publisher__name='传说中的申小五').extra(where=['price>50'])
    models.Book.objects.filter(publisher__name='传说中的申小五', price__gt=50)
    models.Book.objects.extra(select={'count': 'select count(*) from hello_Book'})

个人觉得因为原生Django的orm ​比 SQLAlchemy简单。所以用它。

Django ORM 的优点

  • 1. 遵循 Active Record 模式,对业务相对来说简单一些的网站来说,对外暴露了简简单单的 OO 操作方式?连 GroupBy 的写法都看不出来 SQL 的痕迹。
  • 2. 对于没上手 SQL 的人来说,照着文档撸代码, 稍微懂一点点SQL, 谈笑间简直就是 Python 一波速推流,简单而暴力

缺点

  • 1. 没有 Unit Of Work, 这就导致了你需要大量的依据情况来一个一个object的save
  • 2. 没有 Identity Map, 这就导致了会产生很多duplicated 的sql语句 如果你做跨三个表的查询的时候,这个现象就特别明显. 通过 django debug tools 就可以看出来, 当然, 通过 select related 和 prefetch related 也能缓解一下. 或者是走local cache 间接的使用 SQLA
  • 3. JOIN 写起来比较固定。最后发现大部分 JOIN 还是要写 RAWSQL

当然, 上面列的django orm的缺点, 其实sqla帮你解决了大部分

SQLAlchemy 是更加复杂的 ORM 框架,遵循 DataMapper,SQLA 实现了 Unit Of Work , IdentityMap , 对于业务复杂的场景来说,有更好的适应性。

但, 虽然说sqla这么多优点吧, 但架不住复杂到1000多页的使用说明

【Django】django使用原生SQL的方法(附加说说为什么ORM上不了大台面)相关推荐

  1. django中使用原生sql

    django中使用原生sql from django.db import  connection    cursor = connection.cursor()    cursor.execute(& ...

  2. django执行原生SQL语句

    1.原生SQL用法概述 django可以执行原生SQL语句,主要分读和写两类,用法如下: 读(查):xxxModel.object.raw() 写(增删改):connection.cursor() 2 ...

  3. django 使用原生SQL语句反向生成MODELS.PY中的表结构

    在一次工作中,有这么一个问题,就是要导入的数据字段不确定,但是还想使用django的ORM来对数据进行操作.. 琢磨了许久,弄个不完善的方案,但功能是能实现的,主要是思路.废话不多说了,丑陋的展示一下 ...

  4. 左外连接的sql语句_Django数据库连接和使用原生sql语句

    在操作数据库之前,首先先要连接数据库.这里我们以配置 MySQL 为例来讲解. Django连接数据库,不需要单独的创建一个连接对象.只需要在 settings.py 文件中做好数据库相关的配置就可以 ...

  5. EFCore之执行原生SQL语句

    EFCore通过 LINQ 语法为我们提供了非常便利的方式来操作数据库. 当有些业务逻辑较复杂而不能使用 LINQ 来查询时,可以使用原生 SQL 查询. 或者使用 LINQ 查询导致 SQL 查询效 ...

  6. Django中一个项目使用多个数据库(原生sql 的使用,亲测)

    在django项目中, 一个工程中存在多个APP应用很常见. 有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接. 参考:http://blog.csdn.net/songfree ...

  7. python命令行调试django代码_Django shell调试models输出的SQL语句方法

    在settings.py里,配置如下logging: LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': ...

  8. django使用mysql原始语句,Django中使用mysql数据库并使用原生sql语句操作

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

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

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

最新文章

  1. Jacobian矩阵的几何意义
  2. bzoj 1086: [SCOI2005]王室联邦
  3. ORACLE JET BASIC TABLE
  4. HBase thrift C++编程
  5. 稳定菜篮子市场供需 农业大健康-林裕豪:从玉农业全力保障
  6. 【技术种草】介绍一款开源电商网站的购物车添加功能的实现
  7. 使用Quartz来实现动态定时任务
  8. 李洪强iOS经典面试题30-一个区分度很大的面试题
  9. 计算机论文的主要研究方法有哪些,9大实用的论文研究方法盘点
  10. 【Java面试题】一次完整的Http请求过程(非常详细)
  11. 机房(计算机室)管理制度,湖南石油化工职业技术学院-信息资源中心-管理制度-计算机机房管理制度...
  12. 晶振的匹配电容计算公式
  13. 腾讯云--添加二级域名
  14. 连接数据线截图/截视频
  15. 进击zheng项目zheng-umps-server
  16. 2021腾讯前端笔试实习生
  17. JavaScript数组map方法
  18. word快捷键复制粘贴无法使用
  19. 陈果“有空来坐坐...”
  20. linux 桌面显示 kvm,Linux的桌面虚拟化技术KVM(五)——virsh常用命令

热门文章

  1. linux 可执行文件的分析(gcc GUN BUILEIN)
  2. JS 中去除空格和换行的正则表达式写法
  3. 自定义 Git - Git 钩子 (自动部署)
  4. Linux网卡命名规则
  5. AGC008D K-th K
  6. Dynamics CRM On-Premise V9安装手记
  7. 结对项目——Subway
  8. UVA12511 - Virus(DP+最长公共上升子序列)
  9. 2016 7 25 链表
  10. ie7浏览器传输中文的问题