[技术博客]django连接mysql数据库的方法及部分问题的解决方法
配置机器介绍
操作系统: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数据库的方法及部分问题的解决方法的更多相关文章
- 3.django连接mysql数据库及安装mysqldb驱动报错解决办法
1.在setting.py设置连接数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'djang ...
- [技术博客] Django中文件的保存与访问
[技术博客] Django中文件的保存与访问 在TextMarking项目开发中,数据库需要保存用户上传的文本文档. 原型设计:用户点击上传文本->保存文本->文本发送到后端保存为文件. ...
- 红眼技术博客 » redis连接池红眼技术博客 » redis连接池
红眼技术博客 » redis连接池 redis连接池
- Django 连接mysql数据库中文乱码
Django 连接mysql数据库中文乱码 2018年08月25日 20:55:15 可乐乐乐乐乐 阅读数:566 版本:CentOS6.8 python3.6.4 django1.8.2 数据库 ...
- django连接mysql数据库以及建表操作
django连接mysql数据库需要在project同名的目录下面的__init__.py里面加入下面的东西 import pymysql pymysql.install_as_MySQLdb() 找 ...
- Python3:Django连接Mysql数据库时出错,'Did you install mysqlclient or MySQL-python?'
Python3:Django连接Mysql数据库时出错,'Did you install mysqlclient or MySQL-python?' 一.原因 因为Python版本问题,MySQLdb ...
- Python3之Django连接mysql数据库
一.mysql服务器 系统版本:CentOS6.8 IP :10.0.0.51 版本 1.授权root远程登录 grant all on *.* to 'root'@'%' identifide by ...
- Django 连接 MySQL 数据库及常见报错解决
目录 Django 连接 MySQL数据库及常见报错解决 终端或者数据库管理工具连接 MySQL ,并新建项目所需数据库 安装访问 MySQL 的 Python 模块 Django 相关配置 可能会遇 ...
- Django连接MySQL数据库配置
1.自己手动创建数据库 create database 数据库名; # 如: create database bms character set utf8; # 授权访问: grant all pri ...
随机推荐
- Docker 0x07: Docke 容器网络
目录 Docke 容器网络 Container Network Model (CNM) 具体项目中代码对象有哪些 Implementations实现的网络(直接英文版) Libnetwork incl ...
- watch - 实时查看命令执行结果
watch - execute a program periodically, showing output fullscreen 定期执行一个程序,全屏显示输出 watch重复运行命令,显示其输出和 ...
- zabbix监控项字体乱码的处理方法
一.新安装完的查看项目的时候字体是乱码的 二.在控制面板的字体中复制出系统的“微软雅黑”字体,粘贴到桌面 粘贴出来之后会产生两个文件,msyhbd.ttf为加粗的字体 三.修改并替换字符集 我是编译安 ...
- Jmeter 局域网的IP欺骗终极解决方案
ip欺骗是什么? ip欺骗就是模拟ip.什么意思呢,一个电脑就只有一个ip地址,当然如果有多块网卡的话,会有多个ip地址,一般服务器上有个网卡,咱们自己的电脑一般都只有一个ip地址,但是你做压测 ...
- nginx部署vue项目
nginx是一个高性能的HTTP和反向代理服务器.因此常用来做静态资源服务器和后端的反向代理服务器.本文主要记录使用nginx去部署使用vue搭建的前端项目,项目基于vue官方的脚手架vue-cli构 ...
- DT系统开发之-在线询盘信息的调取实现
调用标签 <!--{tag("table=message&condition=status=3 and typeid=1&areaid=$cityid&cati ...
- 20180523模拟赛T2——前缀!
简化版题面 jyt毒瘤,写了超长的题面,要看完整题面的翻到最后-- 定义\(f_0(x) = A_x\),\(f_n(x) = \sum^x_{i = 1} f_{n-1}(i)\).给出长度为\(N ...
- 转换复杂的JSON对象为 Map对象
最近项目需要跟客户对接一个webservice接口,客户那传json串过来,属于比较复杂的json串,这里跟大家分享下我项目中所用的解析方法: 该方法需要以下jar package com.test; ...
- Fiddler实现篡改接口请求和返回数据
步骤如下: 点击rules->Automatic Breakpoints,在这个选项下,我们可以看到三个可选项: Before Requests:在请求发出前拦截请求: After Reques ...
- 一个使用vue和echarts结合的demo
前端框架真的很神奇,接触了几天vue.js,用它结合echarts做一个数据分析图,效果如下: 附上源码地址:https://github.com/qingguoYan/orderVue.git