使用原生SQL查询可否讲解下,举个小例子,谢谢
来源:6-5 数据库操作规范
蛮天过海
2019-02-01
我对mysql相对了解些,比较喜欢用数据库里的视图,不知道是不是好习惯;django对复杂的表关系处理比较麻烦,直接用原生SQL,尤其是数据库视图代码,不知道有没有好的办法,望老师指点
3回答
-
这位同学对数据库的了解比较多,数据库视图属于数据库使用的比较高级的内容了,先为这个同学点赞。
首先按照我的一些经验对数据库视图做一个简单的分析,使用数据库视图的常用场景有几个:
是因为原有的表结构不满足业务需求,又不方便更改,从而需要在数据库表结构之上使用视图以满足业务场景
系统性能要求特别高,表结构之间的JOIN方式查询不能满足性能要求
如果是第一种场景,基于数据库视图的可维护性较弱,我建议在业务复杂度小的时候进行推倒重构。
如果是第二种场景,则无可厚非。
如果是没有列举到的场景,可以提出来,我们一起探讨使用数据库视图的必要性。
因为数据库视图对表的完整性要求比较高,且可读性相对较弱,在生产环境如果做交接或合作,会比较痛苦。因而我不是太建议在非必要情况使用数据库视图。
接着回答第二个问题:django对复杂的表关系处理比较麻烦
我认为这里面可能会存在本末倒置的问题,那就是到底是复杂的表关系还是复杂地定义了表关系。对于数据库表,一般应该按照面向对象的方式设计表结构,对象关系之间使用常用的关系操作应该能够满足绝大部分需求。
关于Django使用原生SQL,可以参考以下代码在Django内部使用Raw SQL。
# 使用raw sql from django.db import connection cursor = connection.cursor() sql = 'select * from xxx.xxx' cursor.execute(sql) data = cursor.fetchall()
不过使用Raw SQL需要对Django自动生成表结构的规则有一定的了解。
希望对你有所帮助。
10 -
Ethreal
2019-02-20
正儿八经的公司是不让你用视图这些东西的,这在互联网开发中并不是个好习惯,如果用django orm 写不出复杂查询,django也可以执行原生sql的
10 -
蛮天过海
提问者
2019-02-03
非常感谢老师的详细解答,确实面向对象的理解我还欠缺,我得去了解下
00
相似问题