• django mysql 自定义数据库及配置


    Django 在创建项目的时候,会自动生成配置,不过默认数据库不是我们想要的,现在贴一下 自定义数据库:

    DATABASES = {
        'default': {
            # 'ENGINE': 'django.db.backends.mysql',#默认写这个,先修改了
            'ENGINE': 'mysql',
            'POOL_SIZE': 20,  # 每个进程的连接池的大小,总连接数=20*总进程数
            'STORAGE_ENGINE': 'INNODB',  # 存储引擎
            'CHARSET': 'utf-8',  # 字符集
            'CONN_MAX_AGE': 28790,  # 比mysql默认的wait_timeout小10秒
            'NAME': "mysystem",
            'USER': 'root',
            'PORT': 3306,
            'PASSWORD': "123456",
            'HOST': "127.0.0.1",
            "OPTIONS": {"init_command": "SET default_storage_engine=INNODB;"}
        }
    }
    

      在这里 ENGINE被我替换改写了,创建一个包,如图:

    base.py 代码:
    
    # -*- coding: utf-8 -*-
    import random
    from django.core.exceptions import ImproperlyConfigured
    
    try:
        import MySQLdb as Database
    except ImportError as err:
        raise ImproperlyConfigured(
            'Error loading MySQLdb module.
    '
            'Did you install mysqlclient?'
        ) from err
    
    from django.db.backends.mysql.base import DatabaseWrapper as _DatabaseWrapper
    
    
    class DatabaseWrapper(_DatabaseWrapper):
        def get_new_connection(self, conn_params):
            pool_size = self.settings_dict.get('POOL_SIZE') or 1
            # 1/0
            # print(pool_size,'error')
            return ConnectPool.instance(conn_params, pool_size).get_connection()
    
        def _close(self):
            return None  # 覆盖掉原来的close方法,查询结束后连接不会自动关闭
    
    
    class ConnectPool(object):
        def __init__(self, conn_params, pool_size):
            self.conn_params = conn_params
            self.pool_size = pool_size
            self.connects = []
    
        # 实现连接池的单例
        @staticmethod
        def instance(conn_params, pool_size):
            if not hasattr(ConnectPool, '_instance'):
                ConnectPool._instance = ConnectPool(conn_params, pool_size)
            return ConnectPool._instance
    
        def get_connection(self):
            if len(self.connects) < self.pool_size:
                new_connect = Database.connect(**self.conn_params)
                self.connects.append(new_connect)
                return new_connect
            index = random.randint(0, self.pool_size - 1)  # 注意这里和range不一样,要减1
            try:
                self.connects[index].ping()
            except:
                self.connects[index] = Database.connect(**self.conn_params)
            return self.connects[index]
    

      整完之后,你就可以验证一下是否是你自定义的引擎。

  • 相关阅读:
    Centos7部署Django
    CentOS7 常用命令
    window安装django-auth-ldap
    解决group by分组默认获取id最小的一条数据
    js基础之if判断
    java操作word转pdf多选框问题(linux服务器下)
    震惊,男默女泪,使用nginx代理,并进行ip拦截
    高德地图在marker里设置自定义属性
    angular项目启动错误
    本地连接虚拟机内的kafka遇到的问题
  • 原文地址:https://www.cnblogs.com/liangliangzz/p/14338048.html
Copyright © 2020-2023  润新知