2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 【Django】django使用原生SQL的方法(附加说说为什么ORM上不了大台面)

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

时间:2022-03-10 16:49:03

相关推荐

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

执行自定义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() # 读取所有

使用raw:

Book.objects.raw('select * from hello_Book') # 返回模型实例

使用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的save2. 没有 Identity Map, 这就导致了会产生很多duplicated 的sql语句 如果你做跨三个表的查询的时候,这个现象就特别明显. 通过 django debug tools 就可以看出来, 当然,通过 select related 和 prefetch related 也能缓解一下. 或者是走local cache 间接的使用 SQLA3. JOIN 写起来比较固定。最后发现大部分 JOIN 还是要写 RAWSQL

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。