使用原生SQL查询可否讲解下,举个小例子,谢谢

来源:6-5 数据库操作规范

蛮天过海

2019-02-01

我对mysql相对了解些,比较喜欢用数据库里的视图,不知道是不是好习惯;django对复杂的表关系处理比较麻烦,直接用原生SQL,尤其是数据库视图代码,不知道有没有好的办法,望老师指点

写回答

3回答

咚咚呛

2019-02-02

这位同学对数据库的了解比较多,数据库视图属于数据库使用的比较高级的内容了,先为这个同学点赞。


首先按照我的一些经验对数据库视图做一个简单的分析,使用数据库视图的常用场景有几个:

  1. 是因为原有的表结构不满足业务需求,又不方便更改,从而需要在数据库表结构之上使用视图以满足业务场景

  2. 系统性能要求特别高,表结构之间的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自动生成表结构的规则有一定的了解。


希望对你有所帮助。

1
0

Ethreal

2019-02-20

正儿八经的公司是不让你用视图这些东西的,这在互联网开发中并不是个好习惯,如果用django orm 写不出复杂查询,django也可以执行原生sql的

1
0

蛮天过海

提问者

2019-02-03

非常感谢老师的详细解答,确实面向对象的理解我还欠缺,我得去了解下

0
0

Django+小程序技术打造微信小程序助手

0到1完整项目实战过程,是难得的Django+小程序全栈项目体验。

991 学习 · 507 问题

查看课程