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.\n'
'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]
整完之后,你就可以验证一下是否是你自定义的引擎。