zoukankan      html  css  js  c++  java
  • 使用Docker跑MySQL 作为Django的存储后端

    Docker的好处不科普了,用过的都说好。
    不想污染自己开发机器上的文件环境,本萌新使用Docker运行Mysql,Redis来作为Django的存储后端和缓存。

    在第一次安装过程中,我遇到了一些问题,是mysqlclient客户端的问题。这个问题及其解决办法参见MacOS 下安装mysqlclient 的问题及解决办法.

    在Django的settings.py文件中,我的关于数据库的配置如下

    DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'solink_ticket_srv',
                'USER': 'root',
                'PASSWORD': 'aZhiUkZoXONpFzs8',
                'HOST': 'localhost',
                'PORT': '3306'
            }
        }
    

    运行migrate后,Django抛出了一个异常,浓缩成一句就是

    'Can't connect to local MySQL server through socket '/tmp/mysql.sock'
    

    查找Google,发现了问题的所在
    解答链接

    原因在于我们使用localhost去连接MySQL时,将尝试通过sock file的方式去连接数据库,而我们的mysql是运行在Docker里头的,通过TCP/IP通信,所以便会出现上面的情况。
    我们将settings.py文件修改如下便可实现

        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'solink_ticket_srv',
                'USER': 'root',
                'PASSWORD': 'aZhiUkZoXONpFzs8',
                'HOST': '127.0.0.1',
                'PORT': '3306'
            }
        }
    

    编写Django单元测试。
    运行django test时,上述配置文件暴露了缺点。字符集问题。

    正常运行Django程序时,数据库是我们创建的,此时,数据库的字符集是我们在创建数据库时指定的,当应用写入非ASCII字符时,并不会出现大问题。
    但是django test运行时将创建测试数据库和测试表,上述的配置文件并没有指定字符集,那么Django创建的数据库字符集,将按照数据库的默认字符集运行,此时,如果很不幸,我们的测试中存在非ASCII字符,那么写入时Django一定会抛出异常。

    此时我们的要修改配置文件为如下,其实就是针对测试数据库,指定字符集

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'solink_ticket_srv',
            'USER': 'solink_ticket_srv',
            'PASSWORD': 'aZhiUkZoXONpFzs8',
            'HOST': DB_HOST,
            'PORT': '3306',
    
            'TEST': {
                'CHARSET': 'utf8mb4',
                'COLLATION': 'utf8mb4_unicode_ci'
            }
        }
    }
    
  • 相关阅读:
    http://git.oschina.net/
    六、jquery操作下拉列表
    在线JS/CSS/HTML压缩,格式化
    网站安全考虑:1、sql注入 2、跨站脚本攻击
    Thinkphp列表搜索排序-----查
    控制器里面打印sql语句
    Thinkphp增加操作(Controller到模型Model的逻辑)
    将文本转换成语音
    随点击来改变按钮的style
    那些年挠头的git
  • 原文地址:https://www.cnblogs.com/pluviophile/p/7860956.html
Copyright © 2011-2022 走看看