第五章 ORM

neverstopforcode 2020-05-12

5.1 概念

  • 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。

  • 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

  • ORM在业务逻辑层和数据库层之间充当了桥梁的作用

5.2 特点

1.优势

  1. ORM解决的主要问题是对象和关系的映射。它通常将一个类和一张表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。

  2. ORM提供了对数据库的映射,不用直接编写SQL代码,只需操作对象就能对数据库操作数据。

  3. 专注业务逻辑,提高开发效率

2. 劣势

  1. 牺牲了程序的执行效率

  2. ORM的缺点是会在一定程度上牺牲程序的执行效率。

  3. ORM的操作是有限的,也就是ORM定义好的操作是可以完成的,一些复杂的查询操作是完成不了。

5.3 Django使用mysql(6)

1. 创建mysql数据库

create database django53(数据库名);

2. settings.py

  • django链接mysql,settings中的文件是明文的

# 使用mysql数据库
DATABASES = {
  ‘default‘:{
        # 引擎
      ‘ENGINE‘:‘django.db.backbends.mysql‘,
      ‘NAME‘:‘django53‘,
      ‘HOST‘:‘127.0.0.1‘,
      ‘PORT‘:3306,
      ‘USER‘:‘root‘,
      ‘PASSWORD‘:‘123‘,
    }
  }

3. __init__.py

  • 配置链接模块,与settings同级,导入pymysql告诉Django使用其链接数据库

  • django默认使用mysqldb模块(只支持py2)

# 与settings同级目录下的__init__.py文件中添加,替换默认
import pymysql
pymysql.install_as_MySQLdb()

4. models.py

  • 通过models创建表
from django import models
class User(models.Model):
  # 在db中创建一个varchar(32)的username字段
  username = models.CharField(max_length=32)
  pwd = models.CharField(max_length=32)

5. mysql的迁移

  • 命令行输入

# 检查每个注册app的models中是否有变化,即变更记录models.py
python manage.py makemigrations (app名称可选)
# 同步变更记录到数据库中,一开始生成表名app名称+类名(小写)
python manage.py migrate
# 从数据库生成对应的models类
python manage.py inspectdb > xxx.py
  • 创建超级用户
python manage.py createsuperuser
# 输入以上命令后,根据提示输入用户名、邮箱、密码、确认密码。密码的要求至少是不八位,不能和邮箱太接近,两次密码需要一致。

6. views.py

  • orm操作,获取数据

    • models.User.objects.all()

    • models.User.objects.get()

    • models.User.objects.filter()

    • 获取的是一个列表

  • views可以视为python的回调函数

from app01 import models
def orm_test(request):
  # 获取表中所有数据,ret为QuerysSet,对象列表
  ret = models.User.objects.all()
  for i in ret:
    print(i.username, i.password)
  • 获取符合条件数据,获取不到或多个会报错
from app01 import models
def orm_test(request):
  # 获取表中一条数据,User object
  ret = models.User.objects.get(username=‘herny‘, password=‘123‘)
  print(ret.username, ret.password)
  • 使用filter方法做认证
from app01 import models
def orm_test(request):
  # 获取满足条件的对象,没有获取到即为空即False
  ret = models.User.objects.filter(username=‘herny‘, password=‘123‘)
  print(ret.username, ret.password)

5.4 ORM中的批量操作

1. 数据模型定义

# 创建商品表对象
from django.db import models
class Product(models.Model):
    name = models.CharField(max_length=200)
    price = models.DecimalField(max_digits=10, decimal_places=2)

2. 批量插入数据

  • 批量插入数据的时候,首先要创建一个对象的列表,然后调用bulk_create方法,一次将列表中的数据插入到数据库中。

product_list_to_insert = list()
for i in range(10):
        product_list_to_insert.append(Product(name=‘producet name ‘ + str(i), price))
Product.objects.bulk_create(product_list_to_insert)

3. 批量更新数据

  • 批量更新数据时,先进行数据过滤,然后再调用update方法进行一次性地更新。下面的语句将生成类似update....from....的SQL语句。

Product.objects.filter(name__contains=‘name‘).update(name=‘new name‘)

4. 批量删除数据

  • 批量更新数据时,先是进行数据过滤,然后再调用delete方法进行一次性删除。下面的语句讲生成类似delete from ... where ... 的SQL语句。

Product.objects.filter(name__contains=‘name query‘).delete()

5.5 数据表加入一个字段

1. 表中添加字段

  1. 可以使用pycharm提供的图形化界面进行插入或通过终端进行插入

  2. 更新models.py 中的类属性

  3. 更新迁移文件中的对应字段,至此完成

相关推荐

inspuryhq / 0评论 2020-07-28
技术之博大精深 / 0评论 2020-06-01