一,ORM概念
1,ORM介绍
对象关系映射 用于实现面向对象编程语言里不同类型系统数据之间的转换。
其就是使用面向对象的方式,操作数据库进行表管理和增删改查操作等。
2,ORM的作用和优点
Django中的对ORM进行封装,对接数据库引擎,执行对应的SQL语句。
使用者无需关心数据库引擎具体实现的软件(Mysql,sqlite......)。重点把握业务逻辑实现即可。之后如果数据库软件更换需要迁移,直接修改相关配置即可。
优点:
ORM使操作数据库变的更为简单、快捷。无需直接编写SQL语句,快速开发。
二,ORM建表
1,映射关系
在Django框架中,通过ORM模型进行数据库的管理和操作。
通过Python代码,Django的ORM模型将代码转为SQL语句,操作数据库。
以下为对应关系:
类名 ==== 表名
属性 ==== 字段
类实例对象 ==== 表记录

2,创建模型(表定义)
创建一个app03应用。模型代码的学习
python manage.py startapp app03
创建应用出错
ModuleNotFoundError: No module named 'app03'

排错:之前创建过该应用的路由,在主路由urlr.py内删除对应项目的路由即可

创建应用后查看文件夹

设置路由
主路由

app03路由

setting添加对应项目

创建一张表,只需在应用下的model.py中定义对应的类模型即可。继承models.Model。
常用的模型字段有哪些: CharField -> 字符串类型 BooleanField -> 布尔类型 IntegerField -> 整数类型 DateField / DateTimeField -> 时间类型 EmailField -> Email类型 TextField -> 文本类型 更多: https://docs.djangoproject.com/en/1.11/ref/models/fields/#field-types https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.CharField
示例:编写一个类模型

from django.db import models
# Create your models here.
class Host(models.Model):
hostname = models.CharField()
ip = models.CharField()
type = models.CharField()
status = models.CharField()
3,字段属性
字段属性,用来限制字段的最大长度,Null值,默认值,主键,唯一性,备注等信息
(1)max_length CharField需要max_length参数来指定VARCHAR数据库字段的大小。 (2)null 如果为True,Django 将用NULL来在数据库中存储空值。 默认值是 False。 (3)default 字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。 (4)primary_key 如果为True,那么这个字段就是模型的主键。如果你没有指定任何一个字段的primary_key=True,Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认的主键,否则没必要设置任何一个字段的primary_key=True。 (5)unique 如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的。 (6)verbose_name 备注的名字,可读更好。 (7)choices 由元祖组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。 如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,而且这个选择框的选项就是choices 中的选项。 举一个例子:我们在使用探测主机功能的时候,我们会记录成功或者失败,这个时候我们就可以使用choices。
修改models.py

from django.db import models
# Create your models here.
Types = (
(1, 'web服务器'),
(2, '数据库主服务器'),
(3, '负载均衡服务器'),
(4, '数据库从服务器'),
(5, '数据库中间件服务器'),
(6, '缓存中间件服务器'),
(7, '日志分析服务器'),
)
Status = (
(0, '下线'),
(1, '在线')
)
class Host(models.Model):
hostname = models.CharField(max_length=50, verbose_name='主机名称')
ip = models.CharField(max_length=15, verbose_name='IP地址')
type = models.IntegerField(choices=Types, verbose_name='服务器类型')
status = models.IntegerField(choices=Status, verbose_name='服务器状态')
4,模型原数据
模型元数据是“任何不是字段的数据”,比如排序选项(ordering),数据库表名(db_table)。在模型中添加class Meta是完全可选的,所有选项都不是必须的。

Meta选项参数
(1)db_table
指定自定义数据库表名的。Django有一套默认的按照一定规则生成数据模型对应的数据库表名,如果你想使用自定义的表名,就通过这个属性指定。
若不提供该参数, Django 会使用 app_label + '_' + module_name 作为表的名字。当你通过db_table覆写表名称时,强烈推荐使用小写字母给表命名
(2)ordering
这个字段是告诉Django模型对象返回的记录结果集是按照哪个字段排序的
例如:
class Meta:
ordering = ['- name']
它是一个字符串的列表或元组。每个字符串是一个字段名,前面带有可选的“-”前缀表示倒序。前面没有“-”的字段表示正序。
(3)verbose_name
可读性更高的名字。可以认为是一个表名注释。
5,迁移数据
创建和迁移数据库表,一般执行两个步骤
①makegrations 根据类模型 创建迁移文件
②migrate 通过迁移文件,进行数据表的创建和修改操作(连接数据库,管理表)
注意:
当模型初次创建和修改都需要执行
①进入操作命令行
②执行makegrations创建迁移文件
d:webdevopsmydjango>python manage.py makemigrations app03
Migrations for 'app03':
app03migrations 001_initial.py
- Create model Host

创建的文件在以下目录

如果遇到以下问题

需要在settings.py 配置

③执行migrate迁移命令
d:webdevopsmydjango>python manage.py migrate app03 Operations to perform: Apply all migrations: app03 Running migrations: Applying app03.0001_initial... OK

以上操作就完成了Django中ORM模型。数据表的创建和修改已经完成。
问:Django连接数据库和数据表在哪里?表创建到哪儿了?
答:默认Django使用的sqlite数据库,sqlite是一个小型数据库,一个文件。
打开sqlite需要按照database控件
安装控件参考: