Django入门到放弃之数据库配置
settings:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'homework1009',
'USER': 'root',
'PASSWORD': 'xxxxx',
'HOST': '192.168.1.128',
'PORT': '3306',
'DEFAULT_CHARSET':'utf-8',
'OPTIONS': {
'init_command': 'SET sql_mode=STRICT_TRANS_TABLES',
}
}
}
# 注意设置MySQL数据库为utf8
项目同名目录__init__.py
import pymysql
pymysql.install_as_MySQLdb()
# sql_pool.py
import pymysql
# from DBUtils.PooledDB import PooledDB 1.x版本使用
from dbutils.pooled_db import PooledDB # 2.x版本使用
POOL = PooledDB(
creator=pymysql, # 使用链接数据库的模块
maxconnections=6, # 连接池允许的最大连接数,0和None表示不限制连接数
mincached=2, # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
maxcached=5, # 链接池中最多闲置的链接,0和None不限制
maxshared=3, # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
maxusage=None, # 一个链接最多被重复使用的次数,None表示无限制
setsession=[], # 开始会话前执行的命令列表。
ping=0,
# ping MySQL服务端,检查是否服务可用。
host='127.0.0.1', # 以下配置也可单独在配置文件中配置
port=3306,
user='root',
password='123',
database='luffy',
charset='utf8'
)
# app.py
from sql_pool import POOL
conn = POOL.connection() # 从连接池种取一个链接(如果没有,阻塞在这)
curser = conn.cursor()
curser.execute('select * from luffy_order where id<2')
res=curser.fetchall()
print(res)
修改数据库的配置文件
DATABASES = {
'default': { # 写(主机)
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'HOST': '192.168.103.158', # 数据库主机
'PORT': 3306, # 数据库端口
'USER': 'admin', # 数据库用户名
'PASSWORD': '111111', # 数据库用户密码
'NAME': 'robot' # 数据库名字
},
'slave': { # 读(从机)
'ENGINE': 'django.db.backends.mysql',
'HOST': '192.168.103.158',
'PORT': 8306,
'USER': 'root',
'PASSWORD': '222222',
'NAME': 'robot'
}
}
创建和配置数据库读写路由
# app01/db_router.py
class MasterSlaveDBRouter(object):
"""数据库读写路由"""
def db_for_read(self, model, **hints):
"""读"""
return "slave"
def db_for_write(self, model, **hints):
"""写"""
return "default"
def allow_relation(self, obj1, obj2, **hints):
"""是否运行关联操作"""
return True
配置数据库读写路由
DATABASE_ROUTERS = ['app01.db_router.MasterSlaveDBRouter'] # 注意路径
1.settings中添加多个salve数据库配置
2.创建和配置数据库读路由
import random
class MasterSlaveDBRouter(object):
"""数据库读写路由"""
def db_for_read(self, model, **hints):
"""读"""
salve_list = ['',''] # 存放配置salve名称的列表
return random.choice(salve_list)
"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少