lxinghua

博客园 首页 新随笔 联系 订阅 管理

Django的ORM简介

1. ORM概念:对象关系映射(Object Relational Mapping,简称ORM)

2. ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。

即用面向对象的方式,描述数据库,操作数据库,达到不用编写SQL语句,就能对数据库进行增删改查。

Pycharm运行Liunx虚拟系统

mysql -uroot -pRoot123       #mysql数据登录,-uroot 登录账号   -pRoot123登录密码

show databases;展示数据库

use 数据名;进入对应数据库

show tables;展示数据表

select * from 表名;  数据表数据展示

exit;   退出数据库

数据库(databases) ORM系统(类)
库(database)
表(tables) 模型类
一行数据(记录) 具体实例
表字段(字段) 类的属性

数据库连接配置

1. 准备工作

官方文档:https://docs.djangoproject.com/zh-hans/3.2/ref/databases/

2. django配置Mysql数据库

1. 进入目标环境:workon djangoApp

2. 安装pymysql: pip install pymysql -i https://pypi.douban.com/simple    前后可用pip list查看该环境下的pip包

3. 进入mysql数据库: mysql -uroot -pRoot123

4. 数据库包含的数据库查看:show databases;

5. 新建需求的数据库:create database CRM charset=utf8;   创建以utf8编码的数据库CRM

6. 创建一个账号为liuxinghua密码为liuxinghua并授权其可全权操作CRM数据库:grant all privilege on CRM.* to 'liuxinghua'@'%' identfied by 'liuxinghua';   

7. 刷新数据库权限:flush privileges;

8. exit; 退出账号root密码Root123的账号,以账号liuxinghua密码liuxinghua再次进入mysql:mysql -uliuxinghua -pliuxinghua;

9. 进入CRM包settings.py文件中进行DATABASES配置:

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

10. CRM包中__init__.py文件设置连接器为pymysql:

import pymysql

pymysql.install_as_MySQLdb()

模型的创建与映射

1. 创建模型

teacher包的models.py文件中进行模型定义

from django.db import models


# Create your models here.
class Student(models.Model):   # student模型是models.Model的子类
    name = models.CharField(max_length=20)
    age = models.SmallIntegerField()
    sex = models.SmallIntegerField(default=1)  # 设置默认值
    qq = models.CharField(max_length=20)
    phone = models.CharField(max_length=20)
    c_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)  # auto_now_add=True自动填充当前时间

 

2. 激活模型

1. 注册app

2. 生成迁移文件

在Liunx虚拟环境djangoApp环境下,进入CRM项目文件夹中: CD py17/CRM

创建app teacher生成迁移文件:python manages.py makemigrations teacher,其作用就是告诉django我对模型做了一些修改,希望把这些修改存储起来

可对迁移文件进行查询:python manage.py sqlmigrate teacher 0001       #查询结果为创建了teacher_student表,数据包含Student类中定义的项目,表名:App名_模型类名.lower()

经所有app的模型更改都保存成为迁移文件:python manage.py  migrate  [app名]    #后方带app名时,则仅将该app的模型更改保存为迁移文件,若无则全部更改

python manage.py  migrate  # 让全部app迁移生效

python manage.py  migrate teacher  # 让teacher app迁移生效

三步依次进行:模型更改-->生成迁移文件-->迁移生效

作用:实时升级数据库,而不会丢失数据

数据的增删改查

准备

1. 打开python交互模式

第一种方法:

在目标djangoApp环境下,安装ipython

pip install ipython -i https://pypi.douban.com/simple

然后进入shell环境

python manage.py shell

第二种 方法:

打开python console,就直接进入了shell环境

1. 第一种

s1 = Student(name='liuxinghua1', age=37, qq=416439533)   #直接实例化进行数据添加

s1.save()   # 进行实例化数据保存

2. 第二种

s2 = Student()

s2.name='liuxinghua2'

s2.age=37

s2.sex=1

s2.qq='416439533'

s2.save()

3. 第三种

Student.object.create(name='liuxinghua3',  age=37, qq=416439533)

4. 第四种

s3 = Student.objects.get_or_create(name='liuxinghua4',  age=37, sex=1, qq=416439533)

1. 在查询之前便于更好识别数据,需要在models.py文件中Student类定义下添加一个函数

def __str__(self):

  return self.name

res = Student.objects.all()

res  或者 print(res.query)

2. 查一条

Student.objects.get(pk=1)   #如符合条件有多条,报错  pk为主键,此处主键为编号

3. 带条件查询

Student.objects.filter(sex=1)

总结:

get拿到是一个对象

all,filter拿到的是查询集,queryset[]

Queryset集合对象:可以用list转成列表,可以迭代,可以切片(不支持负索引)

1. 该单条,通过属性修改

s1 = Student.objects.get(pk=1)    # 首先获取数据

s1.age = 18   # 此次对数据进行修改

s1.save    # 最后对修改数据进行保存

2. 改多条,通过update

Student.objects.filter(name='uxinghua‘.update(age=20)    # 通过刷选修改对应项目的属性数据

Out[17]:2  # 修改数据的条数,表示有两条数据符合刷选并进行了修改

1. delete直接删除

单条删除

s = Student.objects.get(pk=1)   # 首先获取数据

s.delete()   # 直接删除

刷选删除

s = Student.objects.filter(name=‘liuxinghua')   # 首先获取数据

s.delete()   # 直接删除

全部删除

s = Student.objects.all()  # 首先获取数据

s.delete()   # 直接删除

 

posted on 2022-11-03 19:52  興華  阅读(25)  评论(0编辑  收藏  举报