首页 > 其他 > 详细

Django ORM基本用法

时间:2020-07-17 10:40:11      阅读:65      评论:0      收藏:0      [点我收藏+]

一、ORM介绍

1.ORM的概念:

 "对象-关系映射"(Object/Relational Mapping) 的缩写。ORM 把数据库映射成对象,然后通过实例对象完成对关系型数据库的操作,如下图。

技术分享图片

 

2.ORM的特点

 ORM 使用了对象进行数据库操作,开发者无需了解 sql 语法,只要面向对象编程即可,直接与数据交互,不用关心底层数据库。

 

3.ORM 的优点

1)实现了面向对象编程,无需面向数据库编码。

  • 对数据库的操作(如:增、删、改、查)转化成 类属性和方法
  • 不用编写各种 sql 语句

2)实现了数据模型与数据库解耦,消除了不同数据库编码之间的差异。

  • 不用关心数据库是 mysql、Oracle、mssql等
  • 只要更改相关配置,就能完成不同数据库间的迁移

 

4.ORM 的缺点

1)对比直接使用 sql 语句查询,性能有损失。

2)ORM 库不是一个轻量级库,学习成本高。

3)相对于较复杂的 sql 语句,使用 ORM 来操作很复杂,导致代码可读性降低。

 

二、ORM 使用

 1.配置数据库

技术分享图片

1)修改 Django 项目 setting.py ,找到 DATABASES 配置

DATABASES = {
    default: {
        ENGINE: django.db.backends.mysql,  # 数据库引擎
        NAME: work,  # 数据库名称
        HOST: 127.0.0.1,  # 数据库地址,本机 ip 地址 127.0.0.1
        PORT: 3306,  # 端口
        USER: root,  # 数据库用户名
        PASSWORD: 123456,  # 数据库密码
    }
}

 

2)修改 setting.py 同级目录下的 __init__.py 文件,增加如下代码。

import pymysql

pymysql.version_info = (1,3,13,final,0)  # 一定要加上这句代码
pymysql.install_as_MySQLdb()

 pymysql.version_info = (1,3,13,‘final‘,0) 指定版本信息,不然后续会报如下错误 mysqlclient 1.3.13 or newer is required; you have 0.9.3

技术分享图片

 

2.数据模型

1)定义 app 中的 models:例如修改 core/models.py

from django.db import models
# Create your models here.


class department_temp(models.Model):
    id = models.AutoField(primary_key=True)
    jobnum = models.CharField(max_length=100)
    department = models.CharField(max_length=100)
    jirakey = models.CharField(max_length=100)
    name = models.CharField(max_length=100)

    class Meta:  # 必须要写这个类
        db_table = department_temp  # 指定表名
  • 以类名 department_temp 对应数据库表名,继承了models.Model 类。jobnum 对应 字段 jobnum,数据类型 CharField 对应 varchar,max_length 限定长度。
  • class Meta 是一个元类,通过 db_table  指定表名

 

2)基本操作

技术分享图片
from core.models import department_temp

# 增加一条数据
test = department_temp(jobnum = 00000001,department = test,jirakey = 02930213,name = test)
test.save()
View Code

技术分享图片
from core.models import department_temp

# 删除
test = department_temp.objects.get(jobnum = 00000001)
test.delete()

# 另外一种方式
# department_temp.objects.filter(jobnum = ‘00000001‘).delete()

# 删除所有的列
# department_temp.objects.all().delete()
View Code

技术分享图片
from core.models import department_temp

# 修改其中一个字段,再save,相当于SQL中的UPDATE
test = department_temp.objects.get(jobnum = 00000001)
test.name = 亚瑟
test.save()

# 另外一种方式
# department_temp.objects.filter(jobnum = ‘00000001‘).update(name=‘李白‘)

# 修改所有的列
# department_temp.objects.all().update(name=‘李白‘)
View Code

技术分享图片
from core.models import department_temp

# 获取单个对象
test =department_temp.objects.get(jobnum = 00000001)
print(test.name)

# filter相当于SQL中的WHERE,可设置条件过滤结果,返回一个或多个实例对象组成的QuerySets查询集
# test = department_temp.objects.filter(jobnum = ‘00000001‘)[0]

# 数据排序,返回QuerySets查询集
# test = department_temp.objects.order_by(‘id‘)[0]

# 限制返回的数据 相当于 SQL 中的 LIMIT 0,2;返回QuerySets查询集
# test = department_temp.objects.order_by(‘id‘)[0:2]

# 可以组合使用查询条件,返回QuerySets查询集
# test = department_temp.objects.filter(jobnum = ‘00000001‘).order_by(‘id‘)

# 查询所有,返回QuerySets查询集
# test = department_temp.objects.all()
View Code

 

3)进阶操作

技术分享图片
# test = department_temp.objects.filter(name=‘亚瑟‘).count()  # 获取个数

# 大于,小于
# test = department_temp.objects.filter(id__gt=1)              # 获取id大于1的值
# test = department_temp.objects.filter(id__gte=1)              # 获取id大于等于1的值
# test = department_temp.objects.filter(id__lt=10)             # 获取id小于10的值
# test = department_temp.objects.filter(id__lte=10)             # 获取id小于10的值
# test = department_temp.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值

# in
# test = department_temp.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
# test = department_temp.objects.exclude(id__in=[11, 22, 33])  # not in

# isnull
# test = department_temp.objects.filter(jobnum__isnull=True)

# contains
# test = department_temp.objects.filter(name__contains="test")
# test = department_temp.objects.filter(name__icontains="test") # icontains大小写不敏感
# test = department_temp.objects.exclude(name__icontains="test")

# range
# test = department_temp.objects.filter(id__range=[1, 2])   # 范围bettwen and

# order by
# test = department_temp.objects.filter(name=‘亚瑟‘).order_by(‘id‘)    # asc
# test = department_temp.objects.filter(name=‘亚瑟‘).order_by(‘-id‘)   # desc

# group by
# 实现这句包含group by 的 sql: SELECT department, COUNT(id) FROM department_temp GROUP BY department
# from django.db.models import Count, Min, Max, Sum
# test = department_temp.objects.values(‘department‘).annotate(Count(‘id‘))

# limit 、offset
# test = department_temp.objects.all()[10:20]
View Code

 

Django ORM基本用法

原文:https://www.cnblogs.com/shenh/p/13279900.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!