1. 搭建项目配置环境和创建表
创建一个ttsx的项目
django-admin startproject ttsx
在ttsx下的__init__中导入mysql
import pymysql pymysql.install_as_MySQLdb()
配置mysql 读写分离配置
# default:默认的配置的是主数据库 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': 'localhost', 'PORT': 3306, 'USER': 'root', 'PASSWORD': "mysql", 'NAME': "ttsx" }, # 配置的是从数据库 'slave': { 'ENGINE': 'django.db.backends.mysql', 'HOST': 'localhost', 'PORT': 3306, 'USER': 'root', 'PASSWORD': "mysql", 'NAME': "ttsx" },
在项目的目录下新建utils/db_router.py文件如下图:
在 utils/db_router.py中定义一个数据库路由,实现一个策略来控制特定模型的访问性
数据库路由¶
数据库路由是一个类,它提供4个方法:
db_for_read(model, **hints)¶
建议model类型的对象的读操作应该使用的数据库。
如果一个数据库操作能够提供其它额外的信息可以帮助选择一个数据库,它将在hints字典中提供。合法的hints 的详细信息在下文给出。
如果没有建议,则返回None。
db_for_write(model, **hints)¶
建议Model 类型的对象的写操作应该使用的数据库。
如果一个数据库操作能够提供其它额外的信息可以帮助选择一个数据库,它将在hints字典中提供。 合法的hints 的详细信息在下文给出。
如果没有建议,则返回None。
allow_relation(obj1, obj2, **hints)¶
如果obj1 和obj2 之间应该允许关联则返回True,如果应该防止关联则返回False,如果路由无法判断则返回None。这是纯粹的
验证操作,外键和多对多操作使用它来决定两个对象之间是否应该允许一个关联。
class MasterSlaveDBRouter(object): """读写分离路由""" def db_for_read(self, model, **hints): """读数据库""" return "slave" def db_for_write(self, model, **hints): """写数据库""" return "default" <i style="color:transparent">本文来源gaodai$ma#com搞$$代**码网$</i> def allow_relation(self, obj1, obj2, **hints): """是否运行关联操作""" return True
在配置中声明读写分离路由所在的真正路径:
DATABASE_ROUTERS = ["utils.db_router.MasterSlaveDBRouter"]
=========================================================================================================================================================
为类补充字段
在utils目录中创建一个models.py用来”’为模型类补充字段”’的抽象类, 声明一个类是抽象类,不迁移,专门给别的表继承用的
在元选项中增添属性 abstract=True
from django.db import models class BaseModel(models.Model): '''为模型类补充字段''' create_time=models.DateTimeField(auto_now_add=True,verbose_name='创建时间') update_time=models.DateTimeField(auto_now=True,verbose_name='更新时间') class Meta: abstract=True # 声明是抽象模型类,不迁移,专门给别的表继承用的