imyalost

持续学习Django中。。。

 

Django默认使用的数据库是python自带的SQLlite3,但SQLlite并不适用于大型的项目,因此我将数据库换成了MySQL,下面介绍下Django如何配置数据库。。。

我使用的版本是:Python3.6.2+Django2.0+MySQL5.7.21

MySQL下载安装跳过,直接说配置过程:

一、settings.py文件中修改数据库配置为下面的内容:

# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases

DATABASES = {
    \'default\': {
        \'ENGINE\': \'django.db.backends.mysql\',
        \'HOST\': \'127.0.0.1\',
        \'PORT\': \'3306\',
        \'NAME\': \'mysql\',
        \'USER\': \'root\',
        \'PASSWORD\': \'zwg123456\',
        \'OPTIONS\': {
            \'init_command\': "SET sql_mode=\'STRICT_TRANS_TABLES\'",
            },
    }
}

配置信息从上到下依次是:

驱动(ENGINE)、主机地址(HOST)、端口号(PORT)、数据库(NAME)、用户名(NAME)以及登录密码(PASSWORD);

关于sql_mode的设置,可参考Django文档:https://docs.djangoproject.com/en/2.0/ref/databases/#setting-sql-mode

 

二、在__init_.py文件添加如下配置:

# coding=utf-8

import pymysql
pymysql.install_as_MySQLdb()

__init_.py文件是一个空文件,因为Django连接MySQL时默认使用MySQLdb驱动,但MySQLdb不支持Python3,因此这里将MySQL驱动设置为pymysql。

 

三、执行数据迁移

由于Django默认使用的数据库为SQLlite,但现在重新配置了MySQL数据库,因此需要将原来的数据迁移过来。

配置好上面的信息后,执行数据迁移,然后重启服务,就可以继续开发你的系统。

 

四、可能遇到的问题

1、报错:

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None

MySQLclient目前只支持到python3.4,因此如果使用的更高版本的python,可以修改下面路径的文件:

C:\Users\dell\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\django\db\backends\base\base.py

将下面的文件注释掉即可:

 if version < (1, 3, 3):

    raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__) 

2、报错:

site-packages/pymysql/cursors.py:166: Warning: (3135, "\'NO_ZERO_DATE\', \'NO_ZERO_IN_DATE\' and \'ERROR_FOR_DIVISION_BY_ZERO\'
sql modes should be used with strict mode. They will be merged with strict mode in a future release.
") result = self._query(query) site-packages/pymysql/cursors.py:166: Warning: (3090, "Changing sql mode \'NO_AUTO_CREATE_USER\' is deprecated. It will be removed in a future release.") result = self._query(query)

根据提示,SQL modes应该使用安全模式,即该功能将可能在未来的版本中被舍弃或者合并,这是MySQL向后兼容常见的处理方式;

解决方案:

修改django中的配置文件settings.py文件,将数据库的配置里设置SQL_MODES的地方注释掉:

# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases

DATABASES = {
    \'default\': {
        \'ENGINE\': \'django.db.backends.mysql\',
        \'HOST\': \'127.0.0.1\',
        \'PORT\': \'3306\',
        \'NAME\': \'mysql\',
        \'USER\': \'root\',
        \'PASSWORD\': \'zwg123456\',
        # \'OPTIONS\': {
            # \'init_command\': "SET sql_mode=\'STRICT_TRANS_TABLES\'",
            # },
    }
}

然后重新运行即可!

 

PS:如果配置后启动有报错,淡定,检查你修改的文件格式、缩进,检查文件路径,检查MySQL数据库是否成功安装。。。

 

分类:

技术点:

相关文章:

  • 2021-05-20
  • 2021-12-20
  • 2022-12-23
  • 2022-02-08
  • 2021-11-14
  • 2021-06-22
猜你喜欢
  • 2022-12-23
  • 2021-05-12
  • 2021-12-25
  • 2022-12-23
  • 2022-12-23
  • 2022-01-02
  • 2022-12-23
相关资源
相似解决方案