小麦搭建完django后,立马想着加入数据库功能,这样才算完整的web项目,立马开始添加数据库板块:
1.安装数据驱动
继续游荡在官网教程里,小麦安装了django推荐的mysql驱动mysqlclient,windows环境注意,安装最新的mysqlclient可能会出现问题,可以先试一下低版本的,django支持mysqlclient1.3.7+,小麦安装了1.3.12,mysql使用5.7版本
pip install --user mysqlclient==1.3.12
2.修改数据库配置
#mysite/settings
#修改数据库信息
DATABASES = {
\’default\’: {
\’ENGINE\’: \’django.db.backends.mysql\’,
\’NAME\’: \’mysite\’,
\’USER\’: \’root\’,
\’PASSWORD\’: \’Mysite2018.\’,
\’HOST\’: \’192.168.0.1\’,
\’PORT\’: \’3306\’,
}
}
#修改时区
TIME_ZONE = \’Asia/Shanghai\’
3.添加我们自己模型model
#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里的实体都是继承自models.Model,一个class映射成数据库的一个表,每个字段映射成表的column。models的Field函数,你可以用第一个可选的参数,来指定此字段的注释,比如pub_date字段定义。
CharField你需要指定最大长度,不仅用于数据库表字段定义,也用于字段长度校验。同时,django也支持数据库的关联关系,一对一,一对多,多对多。
4.激活我们的实体model
django中app是可插拔的,一个app可以被多个项目引用,当然,app只有被install到指定项目中,才可生效。找到我们的应用polls下的app.py,将app信息install到mysite的settings中:
#安装应用mysite/settings.py
INSTALLED_APPS = [
\’polls.apps.PollsConfig\’,
\’django.contrib.admin\’,
\’django.contrib.auth\’,
\’django.contrib.contenttypes\’,
\’django.contrib.sessions\’,
\’django.contrib.messages\’,
\’django.contrib.staticfiles\’,
]
接下来我们为新增的实体生成迁移文件,
python manage.py makemigrations polls
此时只是生成django可理解执行的迁移文件,还没有执行数据库操作,我们可以通过执行日志看到:
刷新项目可以看到, polls/migrations/0001_initial.py文件生成,这里我们可以进行最后的微调,确认无误便可以生成数据库schema。
执行迁移文件:python manage.py sqlmigrate polls 0001
可以看创建sql语句了,但现在仍然没有创建数据库,只是发出我们熟悉的sql语句,注意这里是用的mysql,其他数据库可能有些差异。建表时django会给表加上应用前缀,表的主键id会自动生成,外键也会自动添加,当然这些都是自己可以调整的。
现在执行迁移文件:python manage.py migrate
现在数据库表创建完成了,Migrations非常强大,你的实体改动,只需要重新生成Migrations,然后执行migrate,小麦看着数据库表,只要三步,表数据变更方面就完全搞定,貌似比mybatis还要方便:
Change your models (in models.py).
Run python manage.py makemigrations to create migrations for those changes
Run python manage.py migrate to apply those changes to the data