前言
最近由于对Python这一门编程语言产生想要继续深入学习的兴趣也好还是因为和别人一同参加比赛需要这方面的技术也好,都使得我在疫情期间坚持深入学习Python的更多知识。碰巧也是前几天涉及到了有关ORM的知识,想着用博客记录一下自己的学习心得与体会,并且也帮助正在学习相关知识的朋友们更好的理解什么是ORM。
———————————————————————————————————
引子
在正式讲解ORM之前我们先来回忆一下自己以前是怎样操作数据库的?
1. 是用像Navicat这种可视化的数据库操作软件来进行操作?
2. 还是用SQL语句来进行操作?
> 1 import pymysql
> 2
> 3 def index(request) :
> 4 # 创建连接
> 5 coon = pymysql.connect(
> 6 host = '127.0.0.1',
> 7 port = 3306,
> 8 user = 'root',
> 9 passwd = 'awsl',
> 10 db = 'wxy_test'
> 11 )
> 12 #创建游标
> 13 cursor = conn.cursor()
> 14
> 15 cursor.execute("select username,email from account ")
> 16 data_set = cursor.fetchall()
> 17
> 18 cursor.close()
> 19 conn.close()
> 20
> 21 return HttpResponse(data_set)
我想很多人比较习惯使用SQL语句吧(反正小萌新我还是习惯用SQL语句),很方便就可以从自己连接的数据库里操作数据,但是这样做会存在潜在的隐患。
- 1 、SQL注入1危险,因为有的时候你操作数据库的语句不是写在代码里的,而是通过前端传参数拼接而成的,这让居心悱恻之人通过拼接参数实现SQL注入,从而爆库爆表爆列拿到数据库里的数据
- 2 、数据库操作语句与其他功能代码混杂在一起,对后期维护造成了一定的困难,也增加了维护的成本
真是没想到啊,一个小小的数据库操作居然有这么大大的能量!于是ORM给了我们一个Plan C
———————————————————————————————————
ORM定义
- 1对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。
- 2本质上就是将数据从一种形式转换到另外一种形式。
大家可以看到在定义中我有意标注了2个词——一个是“映射”,一个是“对象”。
映射————把表结构对应(映射)到类
对象————操作数据库的数据犹如操作类一般
映射
把代码中的类变成了数据库中的表结构
SQL语句
有了ORM之后就不用担心自己写的语句会被SQL注入了,并且ORM的数据库操作语句变得相对简单,不需要去关注数据库底层的一些东西了
虽然ORM的出现帮助我们解决了很多问题,但是万物均有两面性有利也有弊,那么下面我们来总结一下ORM的优缺点
总结
- 优点
- 防止自己书写的SQL语句被SQL漏洞攻击(SQL注入)
- 实现了更方便更新和维护,也利于代码重用
- 实现了代码与数据库操作语句的分离
- 缺点
- 无法进行复查的SQL语句查询
- 长期使用ORM进行查询操作,操作者的SQL语句能力会下降
后记
今天的学习分享就到这里啦,下一期我会继续分享我在学习ORM时的心得与体会……如果在今天的分享当中有什么错误,请大家直接指出,我会虚心的向大家学习,毕竟学海无涯,还需继续学习才对啊(回头是岸)!
.
- SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息 ↩︎