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 中数据库的配置

image.png

models 层的书写

image.png

同步数据库

◆Python mange.py makemigrations在migrate文件夹下生成initial.py脚本文件
◆Python manage.py migrate将initialpy脚本中的代码执行,生成相对应的数据表

实操

workbench 创建 一个 database:lesson4
创建一个新的project:one
创建新的app:app
然后修改 settings.py
中的 database,如下配置

  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.mysql',
  4. 'NAME': 'lesson4',
  5. 'USER': 'root',
  6. 'PASSWORD': '',
  7. 'HOST': '127.0.0.1',
  8. 'PORT': '3306'
  9. }
  10. }

然后就可以执行命令,将数据库和 django 连在一起了

https://www.cnblogs.com/zhengyuli/p/10992514.html django 连接 mysql

然后
在 one 文件夹下 执行
python manage.py makemigrations
然后会在 migration 文件下生成这个文件 这是和数据库的关系文件
image.png
然后继续
python manage.py migrate
image.png
然后打开 workbench
发现如下
image.png
证明添加成功!

那其他随着增加这个表外增加的内容是什么呢?
image.png
auth_user 是自己的用户体系
等等一些内容
image.png

添加、修改表的内容

回到 models.py 中来
直接添加一个新的内容,比如 age
image.png
写好之后更新表
进入 虚拟环境中
写入python manage.py makemigrations
然后会检测到添加了一个 age 属性,但是没有默认值,这时候选择1 然后会输入一个需要的默认值,比如这里就是10
image.png
然后就会创建一个 0002_test_age.py 的文件
里面写了依赖和添加的内容
image.png
然后让它执行到数据库中
python manage.py migrate
image.png
成功!多了一个 age
CRUD 就是直接修改 models.py 中的内容即可

2021-11-1

4-2 列方法于属性介绍

字段方法所在位置

  1. from django.db import models
  2. models.CharField...

通过 dir(models) 可以看到里面有哪些类型

字符串与数字类型

  • CharField 对应 mysql 中的 varchar类型,数量比较少
  • TextField 对应更长的
  • EmailField,UrlField 可以通过正则表达式来验证是否正确

image.png

时间类型

image.png

文件类型

image.png

特殊类型介绍

image.png

公共属性介绍

image.png
最后一个应该是 db_index

表关联的方法

image.png
假设有两张表,一张叫 user ,一张叫 profile,两张表相互关联的话,通过 related_name 来进行关联,在 user 表中设置其 related_name 为 profile
当删除关联的表时,为了不报错,设置 on_delete 这样可以置空

实操

根据上面的内容创建一个 user 表

  1. #coding-utf-8
  2. from django.db import models
  3. # 创建一个简单的 model
  4. class Test(models.Model):
  5. # 创建一个列 name,规定为char类型,最长长度为 20
  6. name = models.CharField(max_length=20)
  7. class User(models.Model):
  8. # 设置为主键
  9. id = models.IntegerField(primary_key=True)
  10. # 设置 username 不能为空
  11. username = models.CharField(unique=True, max_length=50, blank=False)
  12. # 默认为0岁
  13. age = models.SmallIntegerField(default=0)
  14. # 设置 db_index 表示可以索引
  15. phone = models.SmallIntegerField(db_index=True, blank=True, default=0)
  16. email = models.EmailField(blank=True, default='')
  17. info = models.TextField()
  18. # auto_now_add 仅在创建的时候自动添加时间
  19. create_time = models.DateTimeField(auto_now_add=True)
  20. # auto_now 更新的时候也添加时间
  21. update_time = models.DateTimeField(auto_now=True)

然后 makemigrations 和 migrate 一下
desc app_user 查询一下
image.png