一 Model模型
模型(Model)负责业务对象和数据库的关系映射(ORM)。
模型是数据的唯一的、权威的信息源。它包含储存数据的字段和字段限制。
通常,每个模型对应数据库中唯一的一张表。
每个模型都是django.db.models.Model的一个Python 子类。
模型的每个属性都表示为数据库中的一个字段。
Django 提供一套自动生成的用于数据库访问的API。
这极大的减轻了开发人员的工作量
1 ORM
ORM是“对象-关系-映射”的简称,主要任务是:
1. 根据对象的类型生成表结构
2. 将对象、列表的操作,转换为sql语句
3. 将sql查询到的结果转换为对象、列表
2 为什么要用模型?
Model是MVC框架中重要的一部分,主要负责程序中用于处理数据逻辑的部分。通常模型对象负责在数据
库中存取数据
它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就
可以轻松更换数据库。
3 MySQL数据库配置
在当前环境中安装MySQL
$ yum install mariadb-server -y
安装 pymysql
$ pip install pymysql
MySQL中创建数据库
$ mysql -uroot -ppassword
> create databases 数据库名称 default charset=utf8;
Django项目中配置数据库
修改settings.py文件中的DATABASE配置项
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名',
#确认mysql中数据库存在;
'USER': '用户名',
'PASSWORD': '密码',
'HOST': 'localhost',
'PORT': '3306',
}
}
MySQL的常见报错解决
报错信息: 找不到MySQL数据库模块
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No mo
dule named 'MySQLdb'.
Did you install mysqlclient or MySQL-python?
报错解决方法: 打开 项目名/__init__.py ,写入以下代码导入pymysql:
import pymysql
pymysql.install_as_MySQLdb()
数据库开发流程
在models.py中定义模型类,要求继承自models.Model
from django.db import models
from datetime import datetime
# Create your models here.
class Users(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField(default=20)
phone = models.CharField(max_length=16)
addtime=models.DateTimeField(default=datetime.now)
class Meta:
db_table = "users" # 指定表名
把应用加入settings.py文件的installed_app项
编辑myweb/settings.py文件,并将项目应用文件名添加到该INSTALLED_APPS设置
INSTALLED_APPS = [
# ......
'应用名称',
]
生成迁移文件
$ python manage.py makemigrations
疑难问题解决: 若执行python manage.py makemigrations命令(也可能人比较皮,把migrations文件夹
给删了),会提示"No changes detected." 可能有用的解决方式如下:
# 生成一个空的initial.py
$ python manage.py makemigrations --empty yourappname
# 生成原先的model对应的migration file
$ python manage.py makemigrations
执行迁移
$ python manage.py migrate
注意: 根据数据库表生成model中的类
$ python manage.py inspectdb > app/models.py
二 定义模型
在模型中定义属性,会生成表中的字段
django根据属性的类型确定以下信息:
当前选择的数据库支持字段的类型
渲染管理表单时使用的默认html控件
在管理站点最低限度的验证
django会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为
主键列后,则django不会再生成默认的主键列
属性命名限制
不能是python的保留关键字
由于django的查询方式,不允许使用连续的下划线
1 定义模型属性
义属性时,需要字段类型
字段类型被定义在django.db.models.fields目录下,为了方便使用,被导入到django.db.models
中
使用方式
1. 导入from django.db import models
2. 通过