django连接mysql数据库_[技术博客]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

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 "", line 1, in

File "/tmp/pip-build-4zmu2e7d/mysqlclient/setup.py", line 16, in

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/

sudo apt install libmysqlclient-dev python-dev

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值