Django 对各种数据库提供了很好的支持, 包括: PostgreSQL、 MySQL、 SQLite 和 Oracle, 而且为这些数据库提供了统一的调用 API,这些 API 统称为 ORM 框架。 通过使用 Django 内置的 ORM 框架可以实现数据库连接和读写操作。
构建模型:
ORM 框架是一种程序技术,用于实现面向对象编程语言中不同类型系统的数据之间的转换。
从效果上说,其实是创建了一个可在编程语言中使用的"虚拟对象数据库' ,通过对虚拟对象数据库操作从而实现对目标数据库的操作,虚拟对象数据库与目标数据库是相互对应的。
在 Django 中,虚拟对象数据库也称为模型。通过模型实 现对目标数据库的读写操作,实现方法如下:
- 配置目标数据库信息, 主要在 settings.py 中设置数据库信息。
- 构建虚拟对象数据库, 在 App 的 models.py 文件中以类的形式定义模型。
- 通过模型在目标数据库中创建相应的数据表。
- 在视图函数中通过对模型操作实现目标数据库的读写操作。
下面是setting.py文件中的配置文件(假定连接mysql)。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_db',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
},
}
我们尝试在index中添加模型文件:
建立俩个模型一个是产品分类表,一个是产品信息表。
# 创建产品分类表
class Type(models.Model):
id = models.AutoField(primary_key=True)
type_name = models.CharField(max_length=20)
# 创建产品信息表
class Product(models.Model):
id = models.AutoField(primary_key=True) # Type 中命名一个名为 id 的字段,该字段的数据类型为整型并设 置为主键
name = models.CharField(max_length=50)
weight = models.CharField(max_length=20)
size = models.CharField(max_length=20)
type = models.ForeignKey(Type, on_delete=models.CASCADE)
定义好模型后,需要生成迁移文件并执行使其生成数据表,
生成迁移文件:
>python manage.py makemigrations
执行迁移文件:
>python manage .py migrate
Django为模型的数据划分了多种不同的数据类型:
表字段 | 说明 |
models.AutoField | 默认会生成一个名为id的字段并为int类型 |
models.CharField | 字符串类型 |
models.BooleanField | 布尔类型 |
models.ComaSeparatedIntegerField | 用逗号分割的整数类型 |
models.DateField | 日期 Cdate) 类型 |
models.DateTimeField | 日期 Cdatetime) 类型 |
models.Decimal | 十进制小数类型 |
models.EmailField | 字符串类型 (正则表达式邮箱) |
models.FloatField | 浮点类型 |
models.IntegerField | 整数类型 |
models.BigIntegerField | 长整数类型 |
models. IP AddressField | 字符串类型 (IPv4正则表达式) |
models.GenericIPAddressField | 字符串类型 , 参数protocol可 以 是 : both、 IPv4和 ipv6, 验证IP地址 |
models.NullBooleanField | 允许为空的布尔类型 |
models.PositivelntegerField | 正整数的整数类型 |
models.PositiveSmallIntegerFied | 小正整数类型 |
models.SlugField | 包含字母、数字、下曲线和连字符的字符串 , 常用于 URL models |
models.SmaIlIntegerField | 小整数类型, 取值范围 (-32,768---+32,767 ) |
models.TextField | 长文本类型 |
models.TimeField | 时间类型, 显示时分秒HH:MM[:ss[.uuuuuu]] |
models.URLField | 字符串 , 地址为正则表达式 |
models.BinaryField | 二进制数据类型 |
Django 提供的字段类型还会对数据进行正则处理和验证功 能等,进一步完善了数据的严谨性。除了表字段类型之外, 每个表字段还可以设置相 应的参数,使得表字段更加完善。字段参数说明如表 :
参数 | 说明 |
NuIl | 如为True, 字段是可以为空 |
Blank | 如为True,设置在Admin站点管理中添加数据时可允许空值 |
Default | 设置默认值 |
primary_key | 如为True, 将字段设置成主键 |
db_column | 设置数据库中 的字段名称 |
Unique | 如为True, 将字段设置成唯一属性, 默认为False |
db_index | 如为True, 为字段添加数据库索引 |
verbose_name | 在Admin站点管理设置字段的显示名称 |
related_name | 关联对象反向引用描述符,用于多表查询 ,可解决一个数据表有两个外 一 键同时指向另一个数据表而出现重名的问题 |
数据表的关系:
一对一。
一对多。
多对多。