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使用内存zipfile对象在内存中打包文件示例
Apr 30 Python
介绍Python的Django框架中的静态资源管理器django-pipeline
Apr 25 Python
Python序列循环移位的3种方法推荐
Apr 09 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
详解python配置虚拟环境
Apr 08 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
Aug 05 Python
python numpy数组复制使用实例解析
Jan 10 Python
基于python和flask实现http接口过程解析
Jun 15 Python
python代码能做成软件吗
Jul 24 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 Python
浅谈Python数学建模之整数规划
Jun 23 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
Wordpress php 分页代码
2009/10/21 PHP
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
原生js二级联动效果
2017/06/20 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
JS实现星星海特效
2019/12/24 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
jquery轮播图插件使用方法详解
2020/07/31 jQuery
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
python实现复制大量文件功能
2019/08/31 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
美发活动策划书
2014/01/14 职场文书
高三体育教学反思
2014/01/29 职场文书
道路建设实施方案
2014/03/18 职场文书
大学学习计划书范文
2014/05/02 职场文书
应届毕业生求职信
2014/05/26 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
HR求职自荐信范文
2014/06/21 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android