使用MySQL作为Django数据库

Django作为WEB开发框架,默认使用SQLite作为开发数据库。生产环境,则通常需要使用MySQL或者PostgreSQL。这里介绍在CentOS上部署完MySQL和Python+Django环境之后,如何转换到MySQL后端。

Django使用mysql后端需要通过pip安装mysqlclient模块,这个编译安装过程依赖系统安装mysql-devel软件包。对于早期的CentOS 5,建议采用MySQL官方软件仓库在CentOS 5安装MySQL 5.7,这样可以方便完成mysqlclient编译(官方MySQL安装路径的库文件和头文件可以直接被编译程序识别,其他非标准路径需要设置)

安装MySQL

CentOS

wget --no-check-certificate https://dev.mysql.com/get/mysql57-community-release-el5-8.noarch.rpm

rpm -ivh mysql57-community-release-el5-8.noarch.rpm

yum install mysql-community-server mysql-community-client \
mysql-community-devel

对于CentOS/RHEL 5建议使用MySQL官方仓库安装安装;CentOS/RHEL 6及以上版本,建议使用发行版自带的MiraDB。这样可以确保mysql-devel库及头文件都在标准目录下,方便后续编译安装Python的mysqlclient。(高版本6/7也可直接使用发行版提供的MySQL-python

  • 执行初始化安全设置:

mysql_secure_installation

macOS

在macOS上,要安装mysqlclient for django,需要首先通过brew安装mysql软件,设置环境后才能够使用pip install mysqlclient。否则会出现报错EnvironmentError: mysql_config not found:

在macOS平台使用Jetbrains的PyCharm来开发Django,需要安装对应的mysqlclient。安装方法参考Install mysqlclient for Django Python on Mac OS X Sierra

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew install mysql
source venv2/bin/activate
pip install mysqlclient

这里执行source venv2/bin/activate是为了激活Python virtualenv环境

准备数据库

参考 创建MySQL数据库和授权 生成一个用于Django应用的简单数据库

create database myappdb character set utf8;

grant usage on myappdb.* to myapp@'%' identified by 'MyPass';

grant all privileges on myappdb.* to myapp@'%';

flush privileges;

参考

Django支持MySQL 5.5或更高版本

安装MySQL Django adapter,mysqlclient

参考 Part VII.b – Install and Configure MySQL for Django

  • 准备python虚拟环境(注意:系统安装Python 2.7和pip)

pip install virtualenv
virtualenv venv2
source venv2/bin/activate

pip install mysqlclient
pip install django
  • 创建django项目

mkdir myapp     # 这里创建目录是为了将manage.py包含到目录下,方便后续维护
cd myapp

django-admin.py startproject myapp .   # 注意这里有一个.
cd myapp

django-admin.py startapp first_app

这里初始花一个django项目(startproject myapp .),然后在这个项目下创建一个名为first_app的应用,这样后续就可以通过访问first_app来实现,并且不同功能模块可以划分到不同的应用下面。

  • 配置settings.py数据库配置,参考django databases - 默认是sqlite3,需要修改成MySQL配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'myappdb',
        'USER': 'myapp',
        'PASSWORD': os.getenv('MYSQL_PASSWORD'),
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

注意:这里将数据库密码明文存储在配置文件中是存在安全隐患的。解决的方法是采用环境变量替换。参考MySQL password in Django设置用户环境变量配置文件~/.bash_profile

export MYSQL_PASSWORD='MyPass'

将上述配置修改成

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'myappdb',
        'USER': 'myapp',
        'PASSWORD': 'MyPass',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

Install and Configure MySQL for Django提供了另外一种基于django环境的设置方法(不依赖Linux/Unix shell环境)。

  • 执行检查和同步迁移数据库

python manage.py check
python manage.py migrate
  • 运行django服务

python manage.py runserver 0.0.0.0:8000

参考

Last updated