【Django 006】Django2.2.10连接mysql5.7详解

sqlite毕竟太轻量,不能用于生产环境,这一节我们就来看看如何把sqlite换成mysql。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

文章目录

    • Pycharm连接mysql
    • 迁移数据到mysql
    • 安装python连接mysql的库
      • 几种不同的库对比
      • 安装pymysql
      • 利用pymysql伪装成mysqldb
    • 完成迁移
    • 数据操作
    • 总结

Pycharm连接mysql

首先要确保本地的mysql实例能在命令行被正常连接,我这里是在本地3306端口起了一个mysql5.7的实例。因为mysql8.0存在一些兼容性问题,不要用。

如果有不知道如何安装mysql或者想修改mysql安装版本的,可以参考我的另一篇博客《rpm,repo和yum的区别和使用详解(centos7安装和升级mysql举例)》
如果已经安装了mysql8.0想卸载再重新安装mysql5.7,可以参考《centos7彻底删除mysql8.0重装mysql5.7操作详解》

(django) [fuhx@testmachine HelloDjango]$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.29 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

成功在命令行连接到mysql,在里面创建一个database待会给Django用

mysql> create database HelloDjango charset=utf8;
Query OK, 1 row affected, 1 warning (0.02 sec)

下面就可以在Pycharm右侧的Database连接一下这个数据库了
【Django 006】Django2.2.10连接mysql5.7详解_第1张图片
填好数据库的信息,第一次连接还需要安装一下驱动

安装驱动可能需要科学上网

【Django 006】Django2.2.10连接mysql5.7详解_第2张图片
驱动安装成功后,点一下Test Connection来测试下连接
【Django 006】Django2.2.10连接mysql5.7详解_第3张图片
成功连接后结构和之前连接的sqlite一样,不过之前的数据库main这里换成了我们自己定义的HelloDjango
【Django 006】Django2.2.10连接mysql5.7详解_第4张图片

迁移数据到mysql

然后就要去Django中配置一下这个database的信息,打开settings.py,注释掉原先配置sqlite的地方,增加mysql的信息

没用的配置注释掉而不是删除,只做增量操作

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'HelloDjango',
        'USER': 'root',
        'PASSWORD': 'xxxxxx',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

填好配置,尝试把之前在models里面定义的Student表迁移到mysql。因为在迁移到sqlite的时候已经生成过迁移,这里只是做一下迁移操作即可

(django) [fuhx@testmachine HelloDjango]$ python manage.py migrate

结果出现下面的报错

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?

提示我们没有Django连接mysql的库mysqlclient,下面我们一起来对比下几种不同的库

安装python连接mysql的库

几种不同的库对比

  • mysqlclient
    这是官方推荐的库,但是因为其对mysql配置有要求,并且网上有提到和mysql8.0不兼容的问题,不推荐使用

不兼容问题见https://www.lagou.com/lgeduarticle/33781.html

  • python-mysql
    这个对python2支持的很好,但是不支持python3,不能使用

  • pymysql
    对python2和python3支持的都很好,而且可以伪装成前两种库,首选

安装pymysql

有两种方法安装库

  • 其一是直接用pip install pymysql的方法

这里需要科学上网或者用 -i 指定源

  • 或者直接在pycharm的setting中的interpreter进行安装

我这里采用的是第二种,如下
【Django 006】Django2.2.10连接mysql5.7详解_第5张图片

利用pymysql伪装成mysqldb

在项目最先加载的HelloDjango/__init__.py中加入下面的代码实现伪装

import pymysql

pymysql.install_as_MySQLdb()

完成迁移

尝试迁移,发现还有下面的报错

django.core.exceptions.ImproperlyConfigured mysqlclient 1.3.13 or newer is required; you have 0.9.3

这是Django2.2.10的一个已知问题,参考我的另一篇博客《django.core.exceptions.ImproperlyConfigured mysqlclient 1.3.13 or newer is required; you have 0.9.3》来解决报错。

成功迁移以后,在Pycharm中刷新一下mysql数据库,发现表已经在mysql成功创建。注意,models只是存储表的构建信息,并不是把之前sqlite的数据一起迁移过来

不刷新表不会自己出来

【Django 006】Django2.2.10连接mysql5.7详解_第6张图片

数据操作

数据操作和sqlite一样,这里用上一节写的两个url来验证下。

首先启动项目

(django) [fuhx@testmachine HelloDjango]$ python manage.py runserver

首先访问http://127.0.0.1:8000/two/addstudent/添加一个学生信息,成功写入一条数据入表
【Django 006】Django2.2.10连接mysql5.7详解_第7张图片
然后访问http://127.0.0.1:8000/two/showstudents/查询一下,返回如下
【Django 006】Django2.2.10连接mysql5.7详解_第8张图片

总结

到这一节为止,MTV模型的三个模块,models,views,templates,我们都简单了解了。下面开始就要针对这三个模型逐一进行深度剖析,django之路终于要正式开始。

你可能感兴趣的:(Python,-,Django)