我们在学习和开发Django的时候,一般是使用SQLite作为数据库。在正式讲网站部署上线是用MySQL数据库比较多。MySQL支持高并发的访问,而且相对于SQLite,MySQL性能更好。下面讲讲如何在Django下安装和使用MySQL。

1、下载MySQL

打开MySQL Community Server下载页面,这里我下载Windows最新版本的zip包,如下图所示。

这里我用8.0的版本,官方说它要比5.7的版本快。若你之前使用的是5.7版本,照旧使用5.7也行。

2、安装MySQL

下载完成之后,解压zip包,再把整个解压之后的结果放到C盘(其他盘也可以)。打开这个MySQL文件夹,里面的文件如下图所示:

3、配置MySQL

这里MySQL的安装目录为C:\mysql-8.0.15-winx64,记住该路径,等下我们配置的时候需要用到。

在该安装目录下,新建一个文件叫my.ini。打开该文件,并写入如下内容:

[mysqld]
# 设置mysql的安装目录,我们实际存放MySQL的目录
basedir=C:/mysql-8.0.15-winx64
# 设置mysql数据库的数据的存放目录
datadir=C:/mysql-8.0.15-winx64/data
# 设置默认使用的端口
port=3306
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人试图攻击数据库
max_connect_errors=10
# 服务端使用的字符集
character-set-server=utf8mb4
# 数据库字符集对应一些排序等规则使用的字符集
collation-server=utf8mb4_general_ci
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件作为认证加密方式
# MySQL8.0默认认证加密方式为caching_sha2_password
default_authentication_plugin=mysql_native_password [mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4 [client]
default-character-set=utf8mb4
port=3306

其中,要注意几个配置:

1、配置路径要注意斜杠的写法,要么写"\\",要么写"/";

2、数据库数据存放的目录需要确保文件夹存在,所以我们需要手动在我们指定的目录创建一个data文件夹;

3、MySQL8.0的默认认证加密方式和之前版本不同,为了兼容,设置为mysql_native_password,若不设置,后面会报错,详情见Django2.x连接MySQL8.x的错误解析.

更多配置可以参考MySQL的文档

4、把MySQL的bin目录加入环境变量

为了方便使用命令,把MySQL的bin目录的路径加入系统环境变量Path中。

我们现在MySQL安装路径为C:\mysql-8.0.15-winx64,则bin目录的路径为C:\mysql-8.0.15-winx64\bin。记住该路径,根据你具体情况设置。

右键我的电脑,选择“属性”-->“环境变量”。

找到“Path”这一项,双击打开编辑。光标定位到末尾,输入一个英文状态下的分号,再粘贴bin目录的路径进去,再保存即可。

设置好之后,后面我们可以直接在cmd直接使用MySQL的相关命令。

5、初始化MySQL

打开cmd,快捷键“win+R”,输入cmd再回车,即可打开cmd。

执行初始化命令,该命令会创建一个密码为空的root用户。

mysqld --initialize-insecure --user=mysql --console

执行初始化命令成功之后,再执行下面的命令,安装mysql服务:

mysqld --install

安装服务成功之后,启动服务:

net start mysql

这样,mysql服务就启动了。

ps:若你想删除mysql服务可以执行“sc delete mysql”命令。

6、修改root用户的密码

上面步骤成功之后,可以在cmd输入如下命令进入MySQL:

mysql -u root -p

-u root 是指定root用户登录,-p 是要求输入密码。刚刚初始化创建的密码为空,要求输入密码的时候,直接回车即可。成功登录进去,即可看到如下界面:

输入如下SQL语句,修改root用户的密码:

alter user 'root'@'localhost' identified by '你的密码';

 ps:如果之前已经安装并使用过Mysql,可跳过1-6步骤,直接进行第7步骤。

7、为Django项目创建数据库

Django项目有自己的数据库,我们需要在MySQL中创建一个数据库给Django使用。登录MySQL后,输入如下SQL语句创建数据库:

CREATE DATABASE 你的数据库名称 DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE utf8_unicode_ci;

ps:这里的字符集用utf8mb4和规则用utf8mb4_unicode_ci都可以。记得输入你的数据库名称哦~

8、为Django专门管理该项目数据库的MySQL用户

在这里,我不建议使用root用户直接管理数据库。为了安全考虑,我们需要创建一个用户专门管理我们Django项目的数据库。

在MySQL内输入如下SQL语句创建用户:

CREATE USER '你的用户名'@'localhost' IDENTIFIED BY '你的密码';

接下,再把刚刚创建的数据库的管理权限给予刚刚创建的MySQL用户:

GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的用户名'@'localhost';

最后,刷新权限:

FLUSH PRIVILEGES;

ps:把“你的数据库名”、“你的用户名”和“你的密码”改成你对应的内容哦。

9、安装mysqlclient

Django要使用MySQL的话,需要安装mysqlclient库。

你可以直接执行pip install mysqlclient命令,进行安装。但这个在windows系统可能会报错,编译不了。

这种情况,可以用whl包安装该库。打开https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient,下载对应python版本和windows版本的mysqlclient文件。例如我的电脑python是3.6版本,windows是64位,需要下载的版本为带有cp36,win_amd64字样的文件。

下载完成之后,cmd进入该文件的目录,用pip安装即可(下面用到具体文件名,这个根据看你下载的输入命令):

pip install mysqlclient-1.3.13-cp36-cp36m-win_amd64.whl

10、修改Django数据库配置

打开你的Django项目的settings.py文件,找到DATABASES的配置。我们之前的SQLite配置如下:

现在将其改成:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '你的数据库名',
'USER': '你的MySQL用户名',
'PASSWORD': '你的密码',
'HOST': 'localhost',
'PORT': '',
}
}

ps:把上面那些“你的。。。”对应改一下。

11、用数据库迁移文件创建数据库的表

之前我们开发的时候,多少会生成一些数据库迁移文件。没有的话,用python manage.py makemigrations生成一下。

用如下命令应用迁移文件,这样数据库中的表也跟着创建。

python manage.py migrate

如果之前跳过1-6步骤的,没有把 MySQL8.0的认证加密方式设置为mysql_native_password,则执行迁移命令的时候,将会报错(django.db.utils.OperationalError: (2059, <NULL>)),详情见Django2.x连接MySQL8.x的错误解析.

12、把SQLite数据导入到MySQL中

如果我们之前开发的数据有用或者想搬到MySQL数据库中,我们需要把数据迁移过去。

数据从一个数据库搬到另外一个数据库,只需要两个步骤。旧数据库导出数据,新数据库导入数据。

1)SQLite导出数据

先将Django的数据库配置改回来:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

然后,在cmd执行导出命令:

python manage.py dumpdata > data.json

这样就将数据导出到Django项目根目录下的data.json文件。

2)MySQL导入数据

同样,先将Django的数据库配置改为MySQL的:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '你的数据库名',
'USER': '你的MySQL用户名',
'PASSWORD': '你的密码',
'HOST': 'localhost',
'PORT': '',
}
}

然后,在cmd执行导入命令:

python manage.py loaddata data.json

这里需要等一下,而且可能会出错。注意出错的时候所报的错误信息。如果提示有重复主键,那需要先删掉数据。这些数据是在给MySQL数据库应用迁移文件的时候产生的,一般是content_type相关的表。

进入到MySQL,执行如下的SQL语句:

use 你的数据库名;
delete from auth_permission;
delete from django_content_type;

删除数据之后,再执行一次导入命令即可。基本上,导入不了数据都是MySQL存在数据导致的。

其他注意事项:加载时区表

另外,有可能所安装的MySQL没有加载时区表。这个可能会导致filter对日期的查询有问题。Django官方文档也指出这个问题。MySQL官网也有对应处理方法:加载时区表

Linux/Mac解决方法都很简单。windows系统要先下载一个sql文件:timezone_2018e_posix_sql.zip

下载完成之后,解压得到一个sql文件,再执行cmd命令导入该文件即可:

mysql -u root -p mysql < timezone_posix.sql

Django中把SQLite数据库转换为Mysql数据库的配置方法的更多相关文章

  1. Django中manger/QuerySet类与mysql数据库的查询

    Django中的单表操作 1.精确查询 #查询的结果返回是容器Query Set的函数(Query Set模型类)​# 1. all()   查询的所有的符合条件的结果,支持正向索引,支持索引切片,不 ...

  2. 在django中使用orm来操作MySQL数据库的建表,增删改

    多张表之间的三种关系:一对一,一对多,多对多 创建表 一对一 xx = models.OneToOneField(to='表明',to_field='字段名',on_delete=models.CAS ...

  3. sqlite数据库转换为mysql数据库

    SQLite工具我用的SQLiteStudio2.1.5 下载地址 http://sqlitestudio.pl/?act=download SQLiteStudio打开数据库文件,点工具->导 ...

  4. [PowerDesign]将数据库从SQL Server数据库转换为MySQL

    原文:[PowerDesign]将数据库从SQL Server数据库转换为MySQL 一.迁移Database Schema. 首先使用Sybase Powerdesigner的逆向工程功能,逆向出S ...

  5. jmeter中通过jdbc方式连接mysql数据库的配置参考

    jmeter中通过jdbc方式连接mysql数据库的配置参考: Database URL=jdbc:mysql://ip:port/dbname?useUnicode=true&allowMu ...

  6. Oracle,SQL Server 数据库较MySql数据库,Sql语句差异

    原文:Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 1.关系型数据库 百度百科 关系数据库 ...

  7. SQL Server数据库和MySQL数据库有什么区别?

    SQL Server数据库和MySQL数据库有什么区别呢?详细很多初入IT行业的朋友对于SQL Server数据库和MySQL数据库经常搞混,认为这两种数据库是同一种,其实不然,今天我们来分析一下这两 ...

  8. Shell脚本中执行sql语句操作mysql的5种方法【转】

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

  9. 阿里云服务器 ECS 部署lamp:centos+apache+mysql+php安装配置方法 (centos7)

    阿里云服务器 ECS 部署lamp:centos+apache+mysql+php安装配置方法 (centos7) 1.效果图 1 2. 部署步骤 1 1. mysql安装附加(centos7) 7 ...

随机推荐

  1. Git世界历险记

    Git-版本管理器 Git  ||属于分散型版本管理系统,是为版本管理而而设计的软件.(Linux的创始人Linus Torvalds在2005年开发了Git的原型程序,在此之前人们大多选用Subve ...

  2. 安装yii2 需要token 记录

    在安装yii2过程中会提示需要token,参照github help: https://help.github.com/articles/creating-a-personal-access-toke ...

  3. React基础概念

    Hello Wrold ReactDOM.render( <h1>Hello, world!</h1>, document.getElementById('root') ); ...

  4. 如何简单理解js中this的指向

    前序 每个人学js都会被this指向这个东西搞得很蒙,那就是this的指向问题.首先,我们要明白 this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上thi ...

  5. Revit 模态框

    非模态窗口有一个好处,就是可以一直停留在程序之前,然后持续完成操作.但是在Revit二次开发中,非模态窗口也有几个注意事项. 1.需要在文档关闭的时候,把非模态窗口也关闭掉,不然会导致文档关闭,窗口还 ...

  6. python爬虫爬取京东、淘宝、苏宁上华为P20购买评论

    爬虫爬取京东.淘宝.苏宁上华为P20购买评论 1.使用软件 Anaconda3 2.代码截图 三个网站代码大同小异,因此只展示一个 3.结果(部分) 京东 淘宝 苏宁 4.分析 这三个网站上的评论数据 ...

  7. Android 开发 Fresco框架点击小图显示全屏大图实现 ZoomableDraweeView

    目标需求 实现一张小图片,被点击后变成一个在整个屏幕上显示的大图片.类似于微信朋友圈的图片. 实现流程 1.Fresco基本初始化 2.下载并且导入ZoomableDraweeView 它是实现大图的 ...

  8. 如何用Fiddler手机抓包

    截获智能手机发出的HTTP包有什么用? 用处一: 手机软件程序员利用Fiddler,可以截获手机发出的HTTP包, 从而调试程序: 用处二: 软件测试人员用于测试智能手机上的软件: 用处三: 可以用来 ...

  9. pil库的介绍与应用

    PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. PIL库主要有2个方 ...

  10. 72.纯 CSS 创作气泡填色的按钮特效

    原文地址:https://segmentfault.com/a/1190000015560736 感想:过渡效果+xyz中一轴. HTML code: <nav> <ul> & ...