一,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控件
安装控件参考: