Django学习之路-3使用模型
模型理解
模型抽象了数据的构成、访问和数据之间的逻辑关系,数据库是一个独立于python的东西,Django使用一些类来和数据库打交道,那么这些类就是model的本质,那么这些类就会定义数据库的数据、对数据的访问和操作。所以model是Django和数据库的转接口。
-
ORM:ObjectRelationMap,model负责构建数据库表和交互
-
应用的model类对应表,类中的属性对应表字段
- 所有class都是models.Model的子类
- 所有属性类型都是model.xxx,不能使用其他数据类型 -
Django自带数据库sqllite3(关系型、轻量级),不需要任何配置
-
某大神建议:开发时候使用sqlite3,部署的时候使用mysql或oracle等
- 配置其他数据库修改settings.py即可,如mysql
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '数据库名称', 'PASSWORD':'数据库密码', 'HOST':'127.0.0.1', 'PORT':'3306', } }
- 如果是其他的数据库,那么ENGINE还有:‘django.db.backends.sqlite3’,‘django.db.backends.postgresql’,‘django.db.backends.mysql’,或 ‘django.db.backends.oracle’
- 在__init__.py文件中,导入pymysql包:
import pymysql
pymysql.install_as_MySQLdb()
-
系统在默认开启的某些应用需要至少一个数据表,比如,存储类似cookie、session等,所以,在使用他们之前需要在数据库中创建一些表。请执行以下命令:
$ python manage.py migrate
settings.py
settings.py是一个配置文件,大概如下:
- INSTALLED_APPS 默认包括了以下 Django 的自带应用:
- django.contrib.admin – 管理员站点, 你很快就会使用它。
- django.contrib.auth – 认证授权系统。
- django.contrib.contenttypes – 内容类型框架。
- django.contrib.sessions – 会话框架。
- django.contrib.messages – 消息框架。
- django.contrib.staticfiles – 管理静态文件的框架。
- - (后面的等学习get后,在更新吧…)
使用model
- 必须使用model类
from django.db import models
- 应用的model.py的类对应表,类中的属性对应表字段
- 所有class都是models.Model的子类
- 每个字段都是 Field 类的实例
- 所有属性类型都是model.xxx,不能使用其他数据类型 - 字段常用参数
- max_length:规定数值最大长度
- blank:字段是否可以为空,默认False
- null:字段是否可以存储为null,默认False
- default:默认值
- unique:是否唯一
- verbose_name:假名 - 字段常用的类型
参考:
https://blog.csdn.net/weixin_37773766/article/details/80330221
创建model
- 在这个简单的投票应用中,需要创建两个模型:问题 Question 和选项 Choice。Question 模型包括问题描述和发布时间。Choice 模型有两个字段,选项描述和当前得票数。每个选项属于一个问题。
- 编写polls/models.py
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
- 每个模型被表示为 django.db.models.Model 类的子类
- 每个变量都是 Field 类的实例,都表示为数据库的字段
- 使用 ForeignKey 定义了一个关系,每个 Choice 对象都关联到一个 Question 对象
数据库生成
- 激活模型
为了在我们的工程中包含这个应用,我们需要在配置类 INSTALLED_APPS 中添加设置。因为 PollsConfig 类写在文件 polls/apps.py 中,所以它的点式路径是 ‘polls.apps.PollsConfig’。在文件 mysite/settings.py 中 INSTALLED_APPS 子项添加点式路径
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
- 模型迁移
通过运行 makemigrations 命令,Django 会检测你对模型文件的修改(在这种情况下,你已经取得了新的),并且把修改的部分储存为一次 迁移。
$ python manage.py makemigrations 应用名
- 阅读迁移
迁移是 Django 对于模型定义(也就是你的数据库结构)的变化的储存形式,它们其实也只是一些你磁盘上的文件,它被储存在polls/migrations/0001_initial.py 里,或者你可以运行下面命令,查看迁移好的sql语句
python manage.py sqlmigrate polls 0001
- 创建数据表
这个 migrate 命令选中所有还没有执行过的迁移(Django 通过在数据库中创建一个特殊的表 django_migrations 来跟踪执行过哪些迁移)并应用在数据库上 - 也就是将你对模型的更改同步到数据库结构上
$ python manage.py migrate
- 所以总结一下
- 编辑 models.py 文件,改变模型。
- 运行 python manage.py makemigrations 为模型的改变生成迁移文件。
- 运行 python manage.py migrate 来应用数据库迁移。
shell调试数据库
$ python manage.py shell
(详细调试命令,学习后再补充,可查阅:
https://docs.djangoproject.com/zh-hans/2.0/intro/tutorial02/)