Django学习笔记之ORM基础教程


Posted in Python onMarch 27, 2018

ORM简介

ORM概念

对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。

简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

ORM在业务逻辑层和数据库层之间充当了桥梁的作用。

ORM由来

让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。

几乎所有的软件开发过程中都会涉及到对象和关系数据库。在用户层面和业务逻辑层面,我们是面向对象的。当对象的信息发生变化的时候,我们就需要把对象的信息保存在关系数据库中。

按照之前的方式来进行开发就会出现程序员会在自己的业务逻辑代码中夹杂很多SQL语句用来增加、读取、修改、删除相关数据,而这些代码通常都是重复的。

ORM的优势

ORM解决的主要问题是对象和关系的映射。它通常把一个类和一个表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。

ORM提供了对数据库的映射,不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。

让软件开发人员专注于业务逻辑的处理,提高了开发效率。

ORM的劣势

ORM的缺点是会在一定程度上牺牲程序的执行效率。

ORM用多了SQL语句就不会写了,关系数据库相关技能退化...

ORM总结

ORM只是一种工具,工具确实能解决一些重复,简单的劳动。这是不可否认的。

但我们不能指望某个工具能一劳永逸地解决所有问题,一些特殊问题还是需要特殊处理的。

但是在整个软件开发过程中需要特殊处理的情况应该都是很少的,否则所谓的工具也就失去了它存在的意义。

Django连接MySQL数据库

1. 在Django项目的settings.py文件中,配置数据库连接信息:

DATABASES = {
 "default": {
 "ENGINE": "django.db.backends.mysql",
 "NAME": "你的数据库名称", # 需要自己手动创建数据库
 "USER": "数据库用户名",
 "PASSWORD": "数据库密码",
 "HOST": "数据库IP",
 "POST": 3306
 }
}

2. 在Django项目(注意,项目里的,不是app)的__init__.py文件中写如下代码,告诉Django使用pymysql模块连接MySQL数据库:

import pymysql
pymysql.install_as_MySQLdb()

3.如需在pycharm里视图操作:

Django学习笔记之ORM基础教程 

Django学习笔记之ORM基础教程

Django中ORM的(简单)增删改查

增加表

下面这个例子定义了一个 Person 模型,包含 first_name 和 last_name。

from django.db import models
class Person(models.Model):
 first_name = models.CharField(max_length=30)
 last_name = models.CharField(max_length=30)

然后执行下面命令:

python manage.py makemigrations
python manage.py migrate

first_name 和 last_name 是模型的字段。每个字段被指定为一个类属性,每个属性映射到一个数据库列。

上面的 Person 模型将会像这样创建一个数据库表:

CREATE TABLE myapp_person (
 "id" serial NOT NULL PRIMARY KEY,
 "first_name" varchar(30) NOT NULL,
 "last_name" varchar(30) NOT NULL
);

增加数据

models.Person.object.create(first_name='fu',last_name='yong')

models.Person.object.get(id=1).delete()

obj = models.Person.object.get(id=1)
obj.last_name = 'xiaoyong'<br data-filtered="filtered"><br data-filtered="filtered">obj.save()

models.Person.object.all() #查找所有记录,返回一个queryset对象
models.Person.object.get(字段=值) #按照字段查找

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python实现进程同步和通信的方法
Jan 02 Python
selenium+python自动化测试之鼠标和键盘事件
Jan 23 Python
树莓派使用USB摄像头和motion实现监控
Jun 22 Python
Python之修改图片像素值的方法
Jul 03 Python
python实现二分类的卡方分箱示例
Nov 22 Python
python实现智能语音天气预报
Dec 02 Python
修改Pandas的行或列的名字(重命名)
Dec 18 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 Python
python3中的logging记录日志实现过程及封装成类的操作
May 12 Python
Python3如何在服务器打印资产信息
Aug 27 Python
python爬虫框架feapde的使用简介
Apr 20 Python
python解析json数据
Apr 29 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 #Python
Python安装图文教程 Pycharm安装教程
Mar 27 #Python
python 接口返回的json字符串实例
Mar 27 #Python
使用Django和Python创建Json response的方法
Mar 26 #Python
python查询mysql,返回json的实例
Mar 26 #Python
Python发送http请求解析返回json的实例
Mar 26 #Python
Flask 让jsonify返回的json串支持中文显示的方法
Mar 26 #Python
You might like
对javascript和select部件的结合运用
2006/10/09 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
JS匀速运动演示示例代码
2013/11/26 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
python实现的防DDoS脚本
2011/02/08 Python
学习python 之编写简单乘法运算题
2016/02/27 Python
使用Python对SQLite数据库操作
2017/04/06 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
python区分不同数据类型的方法
2019/10/14 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
2020/05/27 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
2020/08/31 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
自我鉴定注意事项
2014/01/19 职场文书
七年级政治教学反思
2014/02/03 职场文书
《蜗牛》教学反思
2014/02/18 职场文书
建筑工地大门标语
2014/06/18 职场文书
党章培训心得体会
2014/09/04 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
分布式架构Redis中有哪些数据结构及底层实现原理
2022/03/13 Redis