Django 配置数据库

Django 配置数据库,对于现代化的网站来说,数据存储是一个至关重要的环节,本章将会介绍如何为Django配置数据库。

前面提到Django应用程序的配置信息都存储在mysite/settings.py文件中,数据库配置也不例外。settings.py是一个标准的Python模块,在其中存放了很多模块变量,数据库配置信息就是其中的一个变量。默认情况下,Django使用SQLite作为数据库。SQLite是一个免安装的数据库系统,非常简单易学,Python已经提供了相应的支持模块,所以我们不需要做任何事情就可以在Django中使用SQLite了。虽然SQLite存在如此多的优势,但是当我们将Django程序真正应用到生产环境时,可能还是会因为各种原因而不得不更换数据库。因此Django官方提供了对4种数据库的支持:PostgreSQL、MySQL、Oracle和SQLite。

下面就来详细介绍如何为Django配置MySQL数据库的支持。

  • 安装数据库绑定程序:由于Django已经提供了对MySQL的支持,所以我们不需要再做任何额外工作了。
  • 按照以下格式在mysite/settings.py中设置DATABASES节点:
    Django 配置数据库

ENGINE:MySQL数据库支持引擎。
NAME:数据库名。
USER: 数据库用户名,该用户要求拥有对以上数据库的SELECT、INSERT、UPDATE、DELETE以及CREATE DATABASE权限。
PASSWORD:以上数据库用户的密码。
HOST:数据库所在主机名,如果是本地机器的话可使用127.0.0.1。
PORT:为数据库开放的端口号,如果值为空表示默认端口。

在继续后面内容之前必须先按照以上配置信息创建好同名数据库。

数据库配置完成,现在开始创建模型(model),在详细学习Django的ORM开发之前,读者只要将模型理解为数据库表的Python类的表现形式即可。每一个模型对应一个数据库表,而模型的属性就是数据库表的字段。

在线投票系统需要两个模型:问卷(Question)和选项(Choice)。Question包含两个字段question_text(问卷内容)和pub_date(问卷时间),同时Question模型包含一个方法was_ published_recently()用于判断问卷是不是最近(一天内)发布的;Choice同样包含两个字段choice_text(选项内容)和votes(选项得分),另外每一个选项都必须属于一个问卷。结合以上分析,修改polls/models.py文件完成模型代码如下:

# @Author : www.coolcou.com
import datetime

from django.db import models
from django.utils import timezone

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

    def __str__(self):
        return self.question_text

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

上面代码中每一个类就是一个Django模型,它们都继承自django.db.models.Model类,而模型的每一个属性都是Field类的实例,同时也对应一个数据库表的字段。
数据库配置完成后,还需要进行以下额外配置:

  • 配置时区。Django的默认时区是“TIME_ZONE='UTC'”,将其修改为中国时区:“TIME_ZONE='Asia/Shanghai'”
  • 配置语言。Django的默认语言是英语“LANGUAGE_CODE='en-us'”,将其修改为简体中文“LANGUAGE_CODE='zh-Hans'”
  • 添加应用程序,使Django能够识别polls。Django自定义应用程序信息保存在polls/apps.py脚本中,按以下格式将应用程序名polls添加到INSTALLED_APPS节点:
    Django 配置数据库

当前polls/apps.py脚本内容如下:

from django.apps import AppConfig

class PollsConfig(AppConfig):
    name = 'polls'

执行以下命令创建用于生成数据库的Python脚本:

python manage.py makemigrations polls

makemigrations命令告知Django,当前应用程序polls的模型发生改变,需要更新数据库脚本,数据库脚本存放在polls/migrations/文件夹下,脚本名形如0001_initial.py。命令执行后输入如下信息:

Migrations for 'polls':
      polls\migrations\0001_initial.py
        - Create model Choice
        - Create model Question
        - Add field question to choice

通过以下命令可以查看数据库脚本内容:

python manage.py sqlmigrate polls 0001

执行下面命令将Django中的数据库更改写入MySQL:

python manage.py migrate

命令输出信息如下:

Operations to perform:
      Apply all migrations: admin, auth, contenttypes, polls, sessions
    Running migrations:
      Applying polls.0001_initial... OK

如果执行migrate命令时出现类似“ModuleNotFoundError: No module named 'MySQLdb'”的错误,在错误信息最下方会有相应解决方案提示,如“Did you install mysqlclient?”。只需按照提示安装相应模块即可,如

pip install mysqlclient

提示
将数据库更新拆分成makemigrations和migrate两个命令的好处是方便使用源代码管理工具保存数据库更新时所生成的migrations文件。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!