sqlite毕竟太轻量,不能用于生产环境,这一节我们就来看看如何把sqlite换成mysql。
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。
首先要确保本地的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
连接一下这个数据库了
填好数据库的信息,第一次连接还需要安装一下驱动
安装驱动可能需要科学上网
驱动安装成功后,点一下Test Connection
来测试下连接
成功连接后结构和之前连接的sqlite一样,不过之前的数据库main
这里换成了我们自己定义的HelloDjango
然后就要去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,下面我们一起来对比下几种不同的库
不兼容问题见https://www.lagou.com/lgeduarticle/33781.html
python-mysql
这个对python2支持的很好,但是不支持python3,不能使用
pymysql
对python2和python3支持的都很好,而且可以伪装成前两种库,首选
有两种方法安装库
pip install pymysql
的方法这里需要科学上网或者用 -i 指定源
在项目最先加载的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的数据一起迁移过来。
不刷新表不会自己出来
数据操作和sqlite一样,这里用上一节写的两个url来验证下。
首先启动项目
(django) [fuhx@testmachine HelloDjango]$ python manage.py runserver
首先访问http://127.0.0.1:8000/two/addstudent/
添加一个学生信息,成功写入一条数据入表
然后访问http://127.0.0.1:8000/two/showstudents/
查询一下,返回如下
到这一节为止,MTV模型的三个模块,models,views,templates,我们都简单了解了。下面开始就要针对这三个模型逐一进行深度剖析,django之路终于要正式开始。