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() # 直接删除
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!