用Django全栈开发——04. 连接MySQL数据库
大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程,从零开始,到最后成功部署上线的项目。
针对Peekpa.com,我们的数据有两个来源,一个是来自MySQL数据库,另一个则是MongoDB。今天,我们现在这里配置一下MySQL的数据库。
配置Settings
首先,配置MySQL数据库,我们需要在setting.py文件里面修改DATABASES变量。将系统默认的变量修改成下面这个样子:
DATABASES = {
'default': {
# 数据库引擎(是mysql还是oracle等)
'ENGINE': 'django.db.backends.mysql',
# 数据库的名字
'NAME': 'peekpa_db1',
# 连接mysql数据库的用户名
'USER': 'root',
# 连接mysql数据库的密码
'PASSWORD': 'Peekpa2020',
# mysql数据库的主机地址
'HOST': '127.0.0.1',
# mysql数据库的端口号
'PORT': '3306',
}
}
但是由于我们的系统环境:
Python 3.6.3;
MySQL
Django2.1.15
所以,我们首先需要安装mysqlclient,因为Python用这个库来和MySQL数据库相连接。
$ pip install mysqlclient
如何验证mysqlclient安装是否成功?只需要在终端的python里面,通过import MySQLdb来查看是否能够成功导入就可。
如果没有出现上面的样式,会报错,如果是Mac用户的话,需要将以下三个内容做一下软连接处理:
$ ln -s /usr/local/mysql/lib/libmysqlclient.21.dylib /usr/local/lib/libmysqlclient.21.dylib
$ ln -s /usr/local/mysql/lib/libssl.1.0.0.dylib /usr/local/lib/libssl.1.0.0.dylib
$ ln -s /usr/local/mysql/lib/libcrypto.1.0.0.dylib /usr/local/lib/libcrypto.1.0.0.dylib
注意,上面的数字1.0.0和21需要根据具体错误提示来做修改。
运行程序
这一切都做好之后,如果你运行你的Django程序,你就会发现它报错了:
MySQLdb._exceptions.OperationalError: (1049, "Unknown database 'peekpa_db1'")
为啥?是因为你的MySQL数据库里面还没有peekp_db1
这个数据库,所以你需要首先手动的去创建一个database,名字叫peekpa_db1
。
这里就涉及到了MySQL的可视化工具了,这里罗列几种非常常见的MySQL GUI:
官方出品的:MySQL Workbench。这个是免费的,但是功能相对比较少。(https://www.mysql.com/products/workbench/)
Navicat,这个是国产收费软件,但是可以试用14天。相对于前者,这个的功能要更强大。(https://www.navicat.com.cn/)
DBeaver,这个非常好用,十分的推荐。如果没有特别的需求,下载社区版本就可以,社区版本还是免费的。(https://dbeaver.io/download/)
JetBrain出品的DataGrip,非常的好用,如果你有JetBrain账号或者全家桶密钥的话,用这个不错。(https://www.jetbrains.com/datagrip/)
HeidiSQL,这个也比较好用,轻便小巧,喜欢的同学可以体验一下。(https://www.heidisql.com/download.php)
你可以通过这些可视化工具连接到本地的数据库,然后创建一个名字叫peekpa_db1
的databse。
当你创建好之后,再次运行你的Django项目,就不会报错了。
插件入口很好找,就在主页面右侧,有一个竖着的Database标签,点开就是。
之后,我们在讲述到CMS系统的时候,会详细的讲述如何使用PyCharm的Databse插件来查看我们的数据库。
至于另一种连接MongoDB数据,我们会在接下来的章节中给大家介绍。
技术总结
最后总结一下,
MySQL创建应用:
首先,本机要安装MySQL数据库,并且能够正常启动;
连接方法只需要在
settings.py
文件里面,配置DATABASES
变量即可;完毕。
获取代码的唯一途径:关注『皮爷撸码』,回复『代码』即可获得。
长按下图二维码关注,如文章对你有启发,欢迎在看与转发。