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 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
Python EOL while scanning string literal问题解决方法
Sep 18 Python
简单谈谈python的反射机制
Jun 28 Python
基础的十进制按位运算总结与在Python中的计算示例
Jun 28 Python
判断网页编码的方法python版
Aug 12 Python
python实现图书馆研习室自动预约功能
Apr 27 Python
python批量创建指定名称的文件夹
Mar 21 Python
python3.6生成器yield用法实例分析
Aug 23 Python
python可视化实现KNN算法
Oct 16 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
python 多维高斯分布数据生成方式
Dec 09 Python
Python进程间的通信之语法学习
Apr 11 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
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
php数组合并的二种方法
2014/03/21 PHP
ThinkPHP3.1查询语言详解
2014/06/19 PHP
jquery 批量上传图片实现代码
2010/01/28 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
2015/03/18 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
leaflet的开发入门教程
2016/11/17 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
js实现烟花特效
2020/03/02 Javascript
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
美国最流行的男士时尚网站:Touch of Modern
2018/02/05 全球购物
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
学生顶撞老师的检讨书
2014/09/17 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
悬空寺导游词
2015/02/05 职场文书
销售内勤岗位职责
2015/02/10 职场文书
任命书格式范文
2015/09/22 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书
4种非常实用的python内置数据结构
2021/04/28 Python