2021-10-21 / 2021-11-1
4-1 orm 介绍 djangomodel 的创建与修改
什么是 ORM
◆全称: object relational mapping ,通过使用它,我们可以直接使用python的方法去使用数据库。
◆通过把表映射成类,把行作为实例,把字段作为属性, orm在执行对象操作的时候会把对应的操作转换成数据库原生语句的方式来完成数据库开发工作
ORM 的优点
◆使用简单,通过将数据库语法进行封装,直接使用方法即可操作数据库
◆性能好,在通过orm转换成sq|的时候是会有一些消耗,但这个消耗其实非常低,在对整体业务提升的角度说,这点消耗可以忽略不计,除非你对于io操作的要求非常的极端。
◆兼容性好,支持目前市面上多数的关系型数据库,如 mysq| prestresql salite 等
django中的orm(即model)
Django中虚拟对象数据库也叫模型,通过模型实现对目标数据库的读写进行操作,实现如下:
1. 在settings.py中设置数据库信息(需提前在数据库中创建库)
2.在应用app的models.py中以类的形式定义模型
3.通过模型在目标数据库中创建对应的表
4.在视图函数中通过对模型的操作实现 目标数据库的读写操作
settings 中数据库的配置
models 层的书写
同步数据库
◆Python mange.py makemigrations在migrate文件夹下生成initial.py脚本文件
◆Python manage.py migrate将initialpy脚本中的代码执行,生成相对应的数据表
实操
workbench 创建 一个 database:lesson4
创建一个新的project:one
创建新的app:app
然后修改 settings.py
中的 database,如下配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'lesson4',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': '3306'
}
}
然后就可以执行命令,将数据库和 django 连在一起了
https://www.cnblogs.com/zhengyuli/p/10992514.html django 连接 mysql
然后
在 one 文件夹下 执行
python manage.py makemigrations
然后会在 migration 文件下生成这个文件 这是和数据库的关系文件
然后继续
python manage.py migrate
然后打开 workbench
发现如下
证明添加成功!
那其他随着增加这个表外增加的内容是什么呢?
auth_user 是自己的用户体系
等等一些内容
添加、修改表的内容
回到 models.py 中来
直接添加一个新的内容,比如 age
写好之后更新表
进入 虚拟环境中
写入python manage.py makemigrations
然后会检测到添加了一个 age 属性,但是没有默认值,这时候选择1 然后会输入一个需要的默认值,比如这里就是10
然后就会创建一个 0002_test_age.py 的文件
里面写了依赖和添加的内容
然后让它执行到数据库中
python manage.py migrate
成功!多了一个 age
CRUD 就是直接修改 models.py 中的内容即可
2021-11-1
4-2 列方法于属性介绍
字段方法所在位置
from django.db import models
models.CharField...
字符串与数字类型
- CharField 对应 mysql 中的 varchar类型,数量比较少
- TextField 对应更长的
- EmailField,UrlField 可以通过正则表达式来验证是否正确
时间类型
文件类型
特殊类型介绍
公共属性介绍
最后一个应该是 db_index
表关联的方法
假设有两张表,一张叫 user ,一张叫 profile,两张表相互关联的话,通过 related_name 来进行关联,在 user 表中设置其 related_name 为 profile
当删除关联的表时,为了不报错,设置 on_delete 这样可以置空
实操
根据上面的内容创建一个 user 表
#coding-utf-8
from django.db import models
# 创建一个简单的 model
class Test(models.Model):
# 创建一个列 name,规定为char类型,最长长度为 20
name = models.CharField(max_length=20)
class User(models.Model):
# 设置为主键
id = models.IntegerField(primary_key=True)
# 设置 username 不能为空
username = models.CharField(unique=True, max_length=50, blank=False)
# 默认为0岁
age = models.SmallIntegerField(default=0)
# 设置 db_index 表示可以索引
phone = models.SmallIntegerField(db_index=True, blank=True, default=0)
email = models.EmailField(blank=True, default='')
info = models.TextField()
# auto_now_add 仅在创建的时候自动添加时间
create_time = models.DateTimeField(auto_now_add=True)
# auto_now 更新的时候也添加时间
update_time = models.DateTimeField(auto_now=True)
然后 makemigrations 和 migrate 一下
desc app_user 查询一下