zoukankan      html  css  js  c++  java
  • [技术博客]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。

  • 相关阅读:
    关于OS命令注入的闭合问题
    PostgreSQL远程连接配置
    IBatis 配置各种数据库
    iOS开发--图片轮播
    iOS开发--UILabel根据内容自动调整高度
    iOS开发--底部按钮和应用图标显示未读消息
    常用软件安装及VS插件工具
    Git入门
    部署时,出现用户代码未处理 System.Security.Cryptography.CryptographicException 错误解决方法
    .NET 互联网技术简介
  • 原文地址:https://www.cnblogs.com/Water-T/p/10876410.html
Copyright © 2011-2022 走看看