我们在学习和开发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. Google SketchUp Cookbook: (Chapter 5) Roofs: Constraints and Inferences

    软件环境 SketchUp Pro 2018 参考书籍 Google SketchUp Cookbook Creating an Overhanging Roof 屋顶上有一个缝隙需要填充,有两种方法 ...

  2. MySQL 之 MHA + ProxySQL + keepalived 实现读写分离,高可用(三)

    设置Keepalived VIP切换邮件告警 修改keepalived.conf配置: [root@server01 keepalived]# cat keepalived.conf ! Config ...

  3. 软件推荐----数据库数据处理Navicat Premium

    一般情况下,企业对数据库的管控很严,通常管控分成以下: 对整台服务器管理权限,如:操作系统Administrator+SA 对单个数据库(Oracle的表空间)完全权限,如:SQL DB_Owner ...

  4. Python通过百度Ai识别图片中的文字

    版本:python3.7 工作中有需要识别图片中的汗字,查看了半天大神们的博客,但没找到完全可以用的源码,经过自己的实践,以下源码可以实现: 创建应用 首先你需要登录百度AI,选择文字识别,创建一个应 ...

  5. Git世界历险记

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

  6. Winfrom中的几种传值方式

    1.最常见的一种, 不知道你们是否记得构造函数,当然这是对有点基础的人说的, 再我们申明一个类的时候,可能很多时候都不会注意,因为会我们的编辑器自带会默认生成一个不带参数的构造函数, 所以不在意,但是 ...

  7. 请推荐一本SQL教程

    sql系列教程如下 sql教程 SQL 是用于访问和处理数据库的标准的计算机语言. 在本教程中,您将学到如何使用 SQL 访问和处理数据系统中的数据, 这类数据库包括:mysql.SQL Server ...

  8. CSS3之实现光润效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 一文搞清到底什么是 .NET?

    现在各种 .NET 满天飞,别说新手了,连我这样的老手都差点被绕进去.到底什么是 .NET 呢?通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? 这篇文章好长呀 ...

  10. IE高级配置中,存在SSL支持协议,例如SSL TLS。

    IE高级配置中,存在SSL支持协议,例如SSL TLS. 其在注册表的路径为:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\I ...