玩转Django 2.0
上QQ阅读APP看书,第一时间看更新

2.4 数据库配置

数据库配置是选择项目所使用的数据库的类型,不同的数据库需要设置不同的数据库引擎,数据库引擎用于实现项目与数据库的连接,Django提供4种数据库引擎:

     'django.db.backends.postgresql'
     'django.db.backends.mysql'
     'django.db.backends.sqlite3'
     'django.db.backends.oracle'

项目创建时默认使用Sqlite3数据库,这是一款轻型的数据库,常用于嵌入式系统开发,而且占用的资源非常。Sqlite3数据库配置信息如下:

如果把上述的连接信息改为MySQL数据库,首先安装MySQL连接模块,由于mysqldb不支持Python 3,因此Django 2.0不再使用mysqldb作为MySQL的连接模块,而选择了mysqlclient模块,两者之间在使用上并没有太大的差异。

在配置MySQL之前,首先安装mysqlclient模块,这里以pip安装方法为例,打开CMD窗口并输入安装指令pip install mysqlclient,等待模板安装完成。然后检测mysqlclient的版本信息,如果mysqlclient版本信息过低,就不符合Django的使用要求。在CMD窗口进入Python交互解释器进行版本验证,如图2-4所示。

图2-4 mysqlclient版本信息

一般情况下,使用pip安装mysqlclient模块都能符合Django的使用要求。如果在开发过程中发现Django提示mysqlclient过低,而且mysqlclient的版本又大于1.3.3版本,那么可以对Django的源码进行修改,在Python的安装目录下找到base(\Lib\site-packages\django\db\backends\mysql\base.py)文件,在文件中找到如图2-5所示的代码并将其注释掉:

图2-5 注释Django源码

完成mysqlclient模块的安装后,在项目的配置文件settings.py中配置MySQL数据库连接信息,代码如下:

上述连接方式用于连接MySQL里面一个名为django_db的数据库,上述配置只是连接了一个django_db数据库。在日常的开发中,有时候需要连接多个数据库,实现方法如下:

上述代码共连接三个数据库,分别是django_db、MyDjango_db和Sqlite3。django_db和MyDjango_db均属于MySQL数据库系统,Sqlite3属于Sqlite3数据库系统。从属性DATABASES的数据类型可以发现是一个Python的数据字典,也就是说如果需要连接多个数据库,只要在属性DATABASES中设置不同的键值对即可实现。

值得注意的是,本书是以MySQL的5.7版本为例进行介绍的。如果读者使用的是5.7以上的版本,在Django连接MySQL数据库时会提示django.db.utils.OperationalError的错误信息,这是因为MySQL 8.0版本的密码加密方式发生了改变,8.0版本的用户密码采用的是cha2加密方法。

为了解决这个问题,我们通过SQL语句将8.0版本的加密方法改回原来的加密方式,这样可以解决Django连接MySQL数据库的错误问题。在MySQL的可视化工具中运行以下SQL语句:

      #newpassword是我们设置的用户密码
      ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY
   'newpassword';
      FLUSH PRIVILEGES;

Django除了支持PostgreSQL、Sqlite3、MySQL和Oracle之外,还支持SQLServer和MongoDB的连接。由于不同的数据库有不同的连接方式,此处不过多介绍,本书主要以MySQL连接为例,若需了解其他数据库的连接方式,可自行搜索相关资料。