开发环境:
Windows 10
Python 3.7.4
Django 2.2.6
Mysql 8.0.17
承接上一节:https://www.cnblogs.com/daydayupup/p/11741873.html
数据库配置
Django默认使用sqlite3数据库,这是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中。由于Python本身内置了sqlite3,所以无需安装任何程序,就可以直接使用它。
如果要连接Mysql数据库的话,就要下载相应的数据库驱动模块,并且在seetings.py文件中做相应的修改。
首先,打开CMD,使用pip下载MySQL数据库驱动模块,我使用的是mysqlclient
pip install mysqlclient
接着打开mysite/seeting.py文件,使用“Ctrl+F”组合键搜索“DATABASES”,默认情况下如图所示
配置MySQL数据库
注意:你需要预先创建一个数据库,Django不会自动帮你创建数据库。当然,如果使用的是sqlite3就不需要做任何预先配置。
接下来,搜索“INSTALLED_APPS”,在这里注册你的APP。
注册APP的作用是使你的APP能够被其他项目使用,或者可以打包和分发给其他人在他们的项目中使用。
上面的其他条目包含了在你的项目中会使用的所有Django应用,这些应用被默认开启是为了给常规项目带来方便。默认开启的某些应用需要至少一张数据表,所以,在使用他们之前需要在数据库中创建一些表:
py manage.py migrate
可以使用数据库命令行来列出Django所创建的表
创建模型
模型是真实数据的简单明确的描述。它包含了储存的数据所必要的字段和行为。Django 遵循DRY Principle。它的目标是你只需要定义数据模型,然后其它的杂七杂八代码你都不用关心,它们会自动从模型生成。
Django通过自定义Python类的形式来定义具体的模型,每个模型的物理存在方式就是一个Python的类,每个模型代表数据库中的一张表,每个类的实例代表数据表中的一行数据,类中的每个变量代表数据表中的一列字段。Django通过模型,将Python代码和数据库操作结合起来,实现对SQL查询语言的封装。也就是说,你可以不会管理数据库,可以不会SQL语言,你同样能通过Python的代码进行数据库的操作。
在polls/models中,新建两个模型,分别为Question和Chocie。Question包含一个问题和一个发布日期。Choice包含两个字段:该选项的文本描述和该选项的投票数。每一条Choice都关联到一个Question。这些都是由Python的类来体现,编写的全是Python的代码,不接触任何SQL语句。现在,编辑polls/models.py
文件,具体代码如下:
#polls/models 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类的实例,比如,字符字段被表示为CharField,日期时间字段表示为DateTimeField。这将告诉Django每个字段要处理的数据类型。
- 每个Field类实例的变量的名字(如:question_text)也是字段的名字,因此,变量命名要符合数据库命名的格式。
- 定义某些Field类实例需要参数,如 question_text 需要一个 max_length 参数。这个参数的用处不止用来定义数据库结构,也用于数据验证。
- Field类实例也可以接受多个可选参数,如 defaul=0 就是一个可选参数。
- 注意在最后,我们使用
ForeignKey
定义了一个关系。这将告诉 Django,每个Choice
对象都关联到一个Question
对象。Django支持所有常用的数据库关系:多对一、多对多和一对一。
激活模型
py manage.py makemigrations polls
接着,你会看到如下输出
通过运行 makemigrations
命令,Django会检测你对模型文件的修改,也就是告诉Django模型发生改变,并且把这次改动保存为一次迁移(migration)。
迁移(migration)是Django对于模型定义(也就是数据库结构)的变化的存储形式。说白了,迁移就是存储你对模型修改的行为的记录文件。
我们可以在polls/migrations/0001_initial.py中查看我们刚刚记录的迁移数据,它也可以被手动修改。
数据迁移
接着,我们使用migrate命令对数据库进行真正的数据迁移:
py manage.py migrate
这个migrate命令选中所有还未执行过的迁移(migration)(Django 通过在数据库中创建一个特殊的表 django_migrations
来跟踪执行过哪些迁移)并应用在数据库上 - 也就是将你对模型的更改同步到数据库结构上。
数据迁移被分解成生成和应用两个命令是为了让你能够在代码控制系统上提交迁移数据并使其能在多个应用里使用;这不仅仅会让开发更加简单,也给别的开发者和生产环境中的使用带来方便。
使用mysql命令检查test1的数据库表,如下图所示:
这说明数据迁移成功!
从中也可看出数据库表的命名方式是 APP名字_models中定义的类名 。