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官方仓库安装 https://dev.mysql.com/downloads/repo/yum/
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上,要安装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或更高版本
- 准备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