首先,我来介绍一下什么是ORM框架:

O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。

django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。

使用django进行数据库开发的步骤如下:

  1. 配置数据库连接信息
  2. 在models.py中定义模型类
  3. 迁移
  4. 通过类和对象完成数据增删改查操作

Django框架--ORM框架--数据库的关系,如下图所示:

既然用到的数据库,那么我们就不得不提python中一个第三方模块pymysql

1. 安装pymysql

pip install PyMySQL

2. 在Django工程的同名目录下的init文件中添加如下代码:

from pymysql import install_as_MySQLdb

install_as_MySQLdb()

这两句代码主要作用是,让Django框架能够以ORM框架的方式调用PyMySQL模块。

3. 修改数据库配置信息

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1', # 数据库主机
'PORT': 3306, # 数据库端口
'USER': 'root', # 数据库用户名
'PASSWORD': 'mysql', # 数据库用户密码
'NAME': 'django_demo' # 数据库名字
}
}

4. 在MySQL数据库中创建数据库

create database laowang charset=utf8;

以上,我们所有的准备工作就已准备完毕了。

那么,接下来我将为大家讲解一下ORM框架如何使用。

想要使用ORM框架,我们就需要执行一下流程:

1. 定义模型类

2. 给模型类添加字段

想要定义模型类,我们就需要知道什么是模型类,直白的说模型类就是数据库中的表,模型类中的属性就是数据表中的字段。

from django.db import models

#定义图书模型类BookInfo
class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateField()
bread = models.IntegerField(default=0)
bcomment = models.IntegerField(default=0)
is_delete = models.BooleanField(default=False) class Meta:
db_table = 'tb_books' # 指明数据库表名

注意:

  使用ORM框架定义模型类时,模型类会自动帮我们在数据表中创建一个ID字段用作数据表中的字段,并且这个字段是自增长的。

3. 迁移

当我们成功的定义了模型类以后,我们需要进行数据库迁移,否则数据库中不会生成数据表。

迁移命令:

# 生成数据库迁移文件
python manage.py makemigrations # 执行数据库迁移文件
python manage.py migrate

提示:

需要执行数据库迁移的子应用必须要在配置文件中进行注册

当我们的定义的模型类增加新的字段时,也要重新迁移。

当我们的数据表出现问题时,我们可以删除生成的迁移文件,然后重新迁移数据库。


既然我们已经完成了,数据模型的定义,那么接下来我就带领大家对数据库中的数据使用ORM框架进行增删改查的操作。

1. 使用ORM框架添加数据:

# 第一种方式
book = BookInfo(
btitle='西游记',
bput_date=date(1988,1,1),
bread=10,
bcomment=10
) book.save() # 第二种方式
BookInfo.objects.create(
btitle='西厢记',
bput_date=date(1988,1,1),
bread=3540,
bcomment=1230
)

2. 使用ORM框架删除数据:

# 第一种方式
BookInfo.objects.get(name='西游记').delete()

3. 使用ORM框架修改数据:

# 第一种方式
book = BookInfo.objects.get(name='西游记')
book.name = '西游记后传'
book.save() # 第二种方式
BookInfo.objects.filter(name='西厢记').update(name='儒林外史')

4. 使用ORM框架查询数据:

基本查询方式:

# 第一种方式:查询全部数据
BookInfo.objects.all() # 第二种方式:查询全部符合指定条件的数据
BookInfo.objects.filter(id__gt=1) # 第三种方式:查询出一条符合条件的数据
BookInfo.objects.get(name='西厢记')

高级查询方式:

'''
模糊查询:
字段__contains='值'
模型类.objects.filter(字段__contains='值') 范围查询:
字段__in=[值1,....]
模型类.objects.filter(字段__in=['值1',...]) 空查询:
字段__isnull=True 为空
字段__isnull=False 非空
模型类.objects.filter(字段__isnull=True) 比较查询:
字段__gt=值 --> 大于
字段__gte=值 --> 大于等于
字段__lt=值 --> 小于
字段__lte=值 --> 大于等于
模型类.objects.filter(字段__gt=值)
模型类.objects.filter(字段__gte=值) 逻辑查询:
F对象:两个端相互比较时使用F对象
from django.db.models import F
BookInfo.objects.filter(bread__gte=F('bcomment')) Q对象:一般是使用逻辑或(|)时使用Q对象
from django.db.models import Q
BookInfo.objects.filter(Q(bread__gt=20) | Q(pk__lt=3)) 聚合函数:
Avg(字段名) 平均,
Count(字段名) 数量,
Max(字段名) 最大,
Min(字段名) 最小,
Sum(字段名) 求和
count() 统计数量 排序:
order_by(字段名) # 升序
order_by(-字段名) # 降序 关联查询:
一对多查询:
一关系的模型类.多关系模型类名小写_set.get/filter(查询条件)
一关系的模型类.自定义的related_name的值.get/filter(查询条件) 多对一查询:
多关系的模型类.外键名.get/filter(查询条件)
'''

注意:

使用filter、all查询出来的数据是一个查询集,不能直接使用,想使用需要将查询集便利出来。

# 获取模型类集合
book_model_list = BookInfo.objects.filter(id__gte=3) # 便利模型类,将集合中的模型便利出来 for book_model in book_model_list:
print(book_model.id)
print(book_model.name)

Django框架之数据库ORM框架的更多相关文章

  1. LitepalNewDemo【开源数据库ORM框架-LitePal2.0.0版本的使用】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本Demo使用的是LitePal2.0.0版本,对于旧项目如何升级到2.0.0版本,请阅读<赶快使用LitePal 2.0版本 ...

  2. 数据库ORM框架GreenDao

    常用的数据库: 1). Sql Server2). Access3). Oracle4). Sysbase5). MySql6). Informix7). FoxPro8). PostgreSQL9) ...

  3. 数据库 ORM框架 ORMLite

    几个ORM框架的比较 先介绍一下ORM的概念,以前也一直听说,不过没详细了解啥意思.其全称叫做对象关系映射(Object Relation Mapping),是一种程序设计技术,用于实现面向对象编程语 ...

  4. Android 数据库ORM框架GreenDao学习心得及使用总结<一>

    转: http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读 ...

  5. 【转载】Android开源:数据库ORM框架GreenDao学习心得及使用总结

    转载链接:http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁 ...

  6. Python元类实战,通过元类实现数据库ORM框架

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第19篇文章,我们一起来用元类实现一个简易的ORM数据库框架. 本文主要是受到了廖雪峰老师Python3入门教程的启 ...

  7. 《Andorid开源》greenDao 数据库orm框架

       一 前言:以前没用框架写Andorid的Sqlite的时候就是用SQLiteDatabase ,SQLiteOpenHelper ,SQL语句等一些东西,特别在写SQL语句来进行 数据库操作的时 ...

  8. Litepal【开源数据库ORM框架】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 好用的数据库框架. 效果图 代码分析 本篇主要是整理Litepal的引入和增删改查的简单操作,具体使用请阅读参考资料. 使用步骤 一 ...

  9. Android 数据库ORM框架GreenDao学习心得及使用总结<二>

    转:http://blog.csdn.net/xushuaic/article/details/24496191 第五篇 查询 查询会返回符合某些特定标准的实体.你可以使用原始的SQL定制查询语句,或 ...

随机推荐

  1. Laravel实现定时任务的示例代码

    https://mp.weixin.qq.com/s/VUEqjwcHRb0ovhP0wup36A 最近在玩Laravel实现定时任务,这个是示例代码,可以参照这个实例.有需要的可以看看 定时任务是后 ...

  2. lualatex+Beamer生成ppt

    直接放模板代码 \documentclass{beamer} % There are many different themes available for Beamer. A comprehensi ...

  3. CSS画矩形、圆、半圆、弧形、半圆、小三角、疑问框

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. Ubuntu16.04.3深度学习环境搭建

    依赖 pip3 install pillow 安装numpy相关sudo apt-get install python-numpy python-scipy python-matplotlib ipy ...

  5. BiLSTM-CRF学习笔记(原理和理解) 维特比

    BiLSTM-CRF 被提出用于NER或者词性标注,效果比单纯的CRF或者lstm或者bilstm效果都要好. 根据pytorch官方指南(https://pytorch.org/tutorials/ ...

  6. java throw和catch同时使用

    当异常出现在当前方法中,程序只对异常进行部分处理,还有一些处理需要在方法的调用者中才能处理完成,此时还应该再次抛出异常,这样就可以让方法的调用者也能捕获到异常;   Eg: public static ...

  7. 【js】 vue 2.5.1 源码学习(十二)模板编译

    大体思路(十) 本节内容: 1. baseoptions 参数分析 2. options 参数分析 3. parse 编译器 4. parseHTNL 函数解析 // parse 解析 parser- ...

  8. java Eclipse的使用技巧

    eclipse与myeclipse的关系(都属于java开发的工具): 后者是前者的一个插件,后来为了方便使用,myeclipse集合了eclipse,后者是收费的. 可大部分人都是用 eclipse ...

  9. Codevs 四子连棋 (迭代加深搜索)

    题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋一步,黑白双 ...

  10. Python中&、^与and、or

    导火索:给定两个列表,怎么找出他们相同的元素和不通的元素? list1 = [1, 2, 3, 4, 57, 8, 90] list2 = [2, 3, 4, 5, 6, 7, 8] lis = li ...