为了账号安全,请及时绑定邮箱和手机立即绑定

关联式资料库与 Django的资料库模组

标签:
Python Django

更:

商业系统中最常用的资料库就是关联式资料库(Relational Database),开发者先以资料库模型(Database model)来规划模型内容以及资料之间的关联(Relationship),然后依据规格在资料库中产生资料表(数据表)

这好像建筑师先绘出建筑图,然后依图施工来产生建筑物。资料库模型就是建筑图,资料表就是建筑物。我们也可以将资料库模型视为一个有栏位标题与栏位资料的表格

假设有A与B两个资料库模型,两者之间的资料关联有以下三种:

ㄧ一对关联(一对一):模型A里的一笔资料仅能对应到模型B里的一笔资料,反之亦然,Django的栏位资料型态为OneToOneField(一对一栏位)

一对多关联(一对):模型A里的一笔资料仅能对应到模型B里的多笔资料,而模型B里的一笔资料仅能对应到模型A里的一笔资料,Django的栏位资料型态为ForeignKey(外来键)

对多对多关联(多对多):模型A里的一份资料能对应到模型B里的多笔资料,反之亦然,Django的栏位资料型态为 ManyToManyField(多对多栏位)


在关联式资料库中,一般而言资料的存取是利用结构化查询语言(SQL),但Django的资料库模组(资料库模组)使用「物件关联对应」(Object-relational映射(ORM)技术来取代SQL

Django将物件导向语言对应到SQL语言,因此开发者只要撰写物件导向语言来存取资料库,就不需要撰写一般的SQL语言了

这样做法有以下优点:

安全性高:完全杜绝SQL注入(SQL注入)攻击(https://en.wikipedia.org/wiki/SQL_injection)

SQL语法简单:物件导向式语法比SQL语法要简单许多

可以更换不同的资料库,而不需要改写程序:因为不同厂商为了绑定消费者,还是会自订一些专属的SQL语法,盔甲和其他资料库的SQL语法不相容,因此消费者就不敢随意更换资料库

下图说明直接在系统中编写符合A厂商资料库的SQLa语言,未来是否要更换为B厂商资料库,那就会出问题。然而,如果在系统中编写物件导向语言,Django的ORM中介软体(中间件)会负责转为不同的SQL语言(SQLa或SQLb)


https://img3.sycdn.imooc.com/5f463a480001597607820351.jpg



谢谢大家~






 


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消