配置机器介绍

操作系统:Ubuntu 18.04.2 LTS 64位

python版本:Python 3.6.7

Django版本:Django 2.2

MySql版本:5.7.26

数据库选择

我们在使用Django进行小程序后端开发和测试的时候,是直接使用SQLite作为数据库。SQLite是一个基于文件的轻量级数据库,功能简约,小型化,追求最大磁盘效率,但是SQLite数据库同一时间只允许一个写操作,因此吞吐量有限,并不适合多用户并发访问;而MySQL支持高并发的访问,而且相对于SQLite,MySQL性能更好,使用人数更多,相关的教程也更加完善,更适合在生产环境中使用,因此我们选择MySQL作为后端的数据库。

安装MySQL

在ubuntu 1804服务器上安装MySQL的过程主要参考了How To Install MySQL on Ubuntu 18.04这篇教程。

在MySQL5.7以及之后的版本中,为了提高安全性,默认使用auth_socket插件来替代密码认证root用户,所以无法直接为root用户设置密码,root用户也无法使用密码登录。如果需要为root用户设置密码,可以通过以下命令将root用户的认证插件从 auth_socket 改为mysql_native_password

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'very_strong_password';
mysql> FLUSH PRIVILEGES;

具体过程可以参考这里

安装好MySQL之后需要还需要新建一个数据库以及对应的用户来供Django项目使用。

Django连接MySQL

通过修改Django项目的settings.py配置文件将Django的数据库由sqlite改为MySQL:

# settings.py文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/path/to/my.cnf',
},
}
} # my.cnf文件
[client]
database = DATABASE_NAME
user = USER
password = PASSWORD
default-character-set = utf8

安装mysqlclient

将Django的数据库由sqlite改为MySQL之后,需要执行以下命令在数据库中生成相应的数据表:

python3 manage.py makemigrations
python3 manage.py migrate

执行时发生以下错误:

Traceback (most recent call last):
File "/home/ubuntu/.local/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 15, in <module>
import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'
...
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?

通过提示信息和查阅Django文档得知需要安装一个驱动库来连接MySQL数据库。使用较多的驱动库有MySQL-python(MySQLdb),pymysql以及mysqlclient等,由于MySQL-python目前还不支持python3,而mysqlclient基于C语言实现,且完全兼容MySQLdb,速度要优于基于python实现的pymysql(参考How can I connect to MySQL in Python 3 on Windows?),而且是Django官方推荐的驱动库,所以我们选择安装mysqlclient。

通过pip进行安装mysqlclient:

sudo pip3 install mysqlclient

安装时遇到如下错误:

    Complete output from command python setup.py egg_info:
/bin/sh: 1: mysql_config: not found
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-4zmu2e7d/mysqlclient/setup.py", line 16, in <module>
metadata, options = get_config()
File "/tmp/pip-build-4zmu2e7d/mysqlclient/setup_posix.py", line 51, in get_config
libs = mysql_config("libs")
File "/tmp/pip-build-4zmu2e7d/mysqlclient/setup_posix.py", line 29, in mysql_config
raise EnvironmentError("%s not found" % (_mysql_config_path,))
OSError: mysql_config not found ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-4zmu2e7d/mysqlclient/

通过查阅Stack Overflow上的问答pip install mysql-python fails with EnvironmentError: mysql_config not found得知需要在安装前执行以下命令安装对应的库:

sudo apt install libmysqlclient-dev python-dev

执行之后再重新安装即可成功安装mysqlclient。

[技术博客]django连接mysql数据库的方法及部分问题的解决方法的更多相关文章

  1. 3.django连接mysql数据库及安装mysqldb驱动报错解决办法

    1.在setting.py设置连接数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'djang ...

  2. [技术博客] Django中文件的保存与访问

    [技术博客] Django中文件的保存与访问 在TextMarking项目开发中,数据库需要保存用户上传的文本文档. 原型设计:用户点击上传文本->保存文本->文本发送到后端保存为文件. ...

  3. 红眼技术博客 » redis连接池红眼技术博客 » redis连接池

    红眼技术博客 » redis连接池 redis连接池

  4. Django 连接mysql数据库中文乱码

    Django 连接mysql数据库中文乱码 2018年08月25日 20:55:15 可乐乐乐乐乐 阅读数:566   版本:CentOS6.8 python3.6.4 django1.8.2 数据库 ...

  5. django连接mysql数据库以及建表操作

    django连接mysql数据库需要在project同名的目录下面的__init__.py里面加入下面的东西 import pymysql pymysql.install_as_MySQLdb() 找 ...

  6. Python3:Django连接Mysql数据库时出错,'Did you install mysqlclient or MySQL-python?'

    Python3:Django连接Mysql数据库时出错,'Did you install mysqlclient or MySQL-python?' 一.原因 因为Python版本问题,MySQLdb ...

  7. Python3之Django连接mysql数据库

    一.mysql服务器 系统版本:CentOS6.8 IP :10.0.0.51 版本 1.授权root远程登录 grant all on *.* to 'root'@'%' identifide by ...

  8. Django 连接 MySQL 数据库及常见报错解决

    目录 Django 连接 MySQL数据库及常见报错解决 终端或者数据库管理工具连接 MySQL ,并新建项目所需数据库 安装访问 MySQL 的 Python 模块 Django 相关配置 可能会遇 ...

  9. Django连接MySQL数据库配置

    1.自己手动创建数据库 create database 数据库名; # 如: create database bms character set utf8; # 授权访问: grant all pri ...

随机推荐

  1. zynq7020开发板+ Z-turn调试计划

    参加米尔zynq7020开发板试用活动. 收到米尔z-turn板子后,焊接了一个JTAG转接板,以方便调试PL部分,对于后面的调试部分,主要分三个部分走:1.调试FPGA部分,实现逻辑控制外围简单的设 ...

  2. Spark广播变量和累加器

    一.广播变量图解 二.代码 val conf = new SparkConf() conf.setMaster("local").setAppName("brocast& ...

  3. Mysql连接数过多、Mysql连接错误过多的问题处理

    在使用Mysql的过程中,你总是会遇到这样那样的问题,每次去网上查找也相对比较麻烦,所以在此整理一下(以linux ubantu16 系统为例). ========================== ...

  4. sqlserver一次性修改多条

    修改客户表 编号为 0101007002,0101007003的楼栋号  007-1-102,007-1-201 UPDATE gas_customerSET building= CASEWHEN g ...

  5. Httpd服务入门知识-Httpd服务安装

    Httpd服务入门知识-Httpd服务安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Httpd概述 1>.Httpd介绍 20世纪90年代初,国家超级计算机应用中心 ...

  6. Centos7永久修改IP地址(NAT模式)

    永久修改IP地址,即为设置静态的IP地址. 一.修改IP地址前需要准备的工作 1.虚拟机需要使用NAT的网络模式 虚拟机关机状态下,点击"编辑虚拟机设置",点击"网络适配 ...

  7. 【转】大众点评CAT开源监控系统剖析

    https://www.cnblogs.com/yeahwell/p/cat.html 参考文档: 大众点评的实时监控系统分析(一) CAT_source_analyze 透过CAT,来看分布式实时监 ...

  8. centos7服务器部署django项目。

    用到的工具,xftp(文件互传),xshell(远程连接) aliyun服务器防火墙开启的端口.80,22(ssh),3306(mysql),8000,9090 部署项目: 1,安装nginx 1&g ...

  9. Jmeter连接MYSQL数据库,并进行数据库的操作;

    1.在操作jmeter连接mysql数据库之前,我们需要到网上下载一个jar包.并且添加到测试计划里:mysql-connector-java-5.1.13-bin.jar;把这个jar放到jmete ...

  10. A and B and Lecture Rooms(LCA)

    题目描述 A and B are preparing themselves for programming contests. The University where A and B study i ...