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中Collection的使用小技巧
Aug 18 Python
python运行时间的几种方法
Jun 17 Python
Python实现求笛卡尔乘积的方法
Sep 16 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
python实现大转盘抽奖效果
Jan 22 Python
Appium+Python自动化测试之运行App程序示例
Jan 23 Python
django迁移数据库错误问题解决
Jul 29 Python
对Tensorflow中tensorboard日志的生成与显示详解
Feb 04 Python
python3实现网页版raspberry pi(树莓派)小车控制
Feb 12 Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
Jan 06 Python
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 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 批量更新网页内容实现代码
2010/01/05 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
在javascript中对于DOM的加强
2013/04/11 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
Javascript实现字数统计
2015/07/03 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
Vue响应式原理详解
2017/04/18 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
Python 列表反转显示的四种方法
2020/11/16 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
2021/01/24 Python
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
采购员岗位职责
2013/11/15 职场文书
保荐人的岗位职责
2013/11/19 职场文书
外贸业务员求职信范文
2013/12/12 职场文书
信息技术教学反思
2014/02/12 职场文书
《蒙娜丽莎之约》教学反思
2014/02/27 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
实习证明格式范文
2015/06/16 职场文书
学习心理学心得体会
2016/01/22 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS