数据库和ORM
前言
ORM框架
O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。
- 类(class) -> 数据库的表(table)
- 对象(object)–> 记录(record,行数据)
- 对象的属性(attribute)–> 字段(field)
ORM作用
第一章 配置数据库PyMySQL
在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库。
1.1 安装PyMySQL
pip install PyMySQL
1.2 在Django的工程同名子目录的__init__.py文件中添加如下语句(demo/demo/init.py)
from pymysql import install_as_MySQLdb
install_as_MySQLdb()
作用是让Django的ORM能以mysqldb的方式来调用PyMySQL
1.3 修改settings.py中DATABASES配置信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1', # 数据库主机
'PORT': 3306, # 数据库端口
'USER': 'root', # 数据库用户名
'PASSWORD': 'mysql', # 数据库用户密码
'NAME': 'django_demo' # 数据库名字
}
}
1.4 在MySQL中创建数据库
create database django_demo default charset=utf8;
第二章 定义模型类
- 模型类被定义在"应用/models.py"文件中。
- 模型类必须继承自Model类,位于包django.db.models中。
接下来首先以"图书"管理为例进行演示。
2.1 定义
创建应用booktest,在models.py 文件中定义模型类。
from django.db import models
#定义图书模型类BookInfo
class BookInfo(models.Model):
btitle = models.CharField(max_length=128, verbose_name='名称')
author = models.CharField(max_length=64,verbose_name='作者')
bread = models.IntegerField(default=0, verbose_name='阅读量')
class Meta:
db_table = 'tb_books' # 指明数据库表名
def __str__(self):
"""定义每个数据对象的显示信息"""
return self.btitle
2.1.1 数据库表名
- 模型类如果未指明表名,Django默认以 小写app应用名_小写模型类名 为数据库表名。
- 可通过db_table 指明数据库表名。
2.1.2 关于主键
- django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。
- 默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。
2.1.3 属性命名限制
- 不能是python的保留关键字。
- 不允许使用连续的下划线,这是由django的查询方式决定的。
- 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:
属性=models.字段类型(选项)
2.1.4 字段
字段类型 | 说明 |
---|---|
AutoField | 自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性 |
BooleanField | 布尔字段,值为True或False |
CharField | 字符串,参数max_length表示最大字符个数 |
TextField | 大文本字段,一般超过4000个字符时使用 |
IntegerField | 整数 |
DecimalField | 十进制浮点数, 参数max_digits表示总位数, 参数decimal_places表示小数位数 |
FloatField | 浮点数 |
DateTimeField | 日期时间 |
2.2 迁移
将模型类同步到数据库中。
2.2.1 生成迁移文件
python manage.py makemigrations
2.2.2 同步到数据库中
python manage.py migrate